pot[]=[[]];pot(x:xs)=pot(xs)++map(x:)(pot xs);takeWhile p[]=[];takeWhile p(x:xs); |px=x:takewhile p xs;|otherwise=[]|dropWhile p[]=[];dropWhile p(x:xs);|p x=dropwhile p xs;|otherwise=(x:xs)||summe::[Int]->Int;summe(x:xs)=summel(x:xs)0;summel::[Int]->Int->Int summel []akk=akk;summel (x:xs) akk=summel xs (x+akk)| length::[Int]->Int;length (x:xs)= length2 (x:xs) 0;length2::Numa=>[b]->a->a;length2[]akk=akk;length2(x:xs)akk=length2 xs (akk+1)|fak::Integer->Integer;fak 0=1;fak n=n*fak(n-1)|fakul::Numa=>a->a->a|fakul 1 a=a; fakul n a=fakul(n-1)(a*n)|fibN=[fib n|n<-[0..]];where fib n;|n==0=0;|n==1=1;|otherwise=fib (n-1)+fib(n-2)|fibacc=f(0,1)where f(a,b)=a:f (a+b,a)|rev::[a]->[a];rev=revakk[]; revakk akk[]=akk;revakk akk (x:xs)=revakk(x:akk)xs||iSort::[Int]->[Int];iSort[]=[];iSort(x:xs)= insert x(iSort xs);insert::Int->[Int]->[Int];insert x[]=[x];insert x(y:ys);|x<=y=x:y:ys;|otherwise= y:insert x ys|mSort::[Int]->[Int];mSort[]=[];mSort[x]=[x];mSort xs=merge(mSort left)(mSort right);where(left,right)=splitAt(length xs`div`2)xs;merge::[Int]->[Int]->[Int];merge[]xs=xs; merge xs[]=xs;merge(x:xs)(y:ys);|x<=y= x:merge xs(y:ys);|otherwise=y:merge(x:xs)ys|| data GTree a=Leaf a|GNode[GTree a];deriving Show|bsp::GTree Int;bsp=GNode[Leaf 6,GNode[Leaf 4]]|numLeafs::GTree a->Int;numLeafs(Leaf x)=1;numLeafs(GNode trees)= sum(map numLeafs trees) sumTree::Num a=>GTree a->a;sumTree(Leaf x)=x;sumTree (GNode trees)=sum(map sumTree trees)|height::GTree a->Int;height(Leaf x)=1;height(GNode trees)=1+max(map height trees)|lookUp::Eq a=>a->GTree a->Bool;lookUp y(Leaf x)=if(y==x) then True else False;lookUp y(GNode [])=False;lookUp y(GNode trees)=elem True (map(lookUp y)trees)|mapGTree::(a->b)->GTree a->GTree b;mapGTree f(Leaf x)=Leaf(f x); mapGTree f(GNode trees)=GNode(map(mapGTree f)trees)|traverse::GTree a->[a];traverse (Leaf x)=[x];traverse(GNode trees)=concat(map traverse trees)||data(Ord a)=>Tree a=Empty|B (Treea)a(Treea)|insert::Ord a=>Tree a->a->Tree a;insert Empty x=B Empty x Empty; insert(B links wert rechts)x;|x==wert=B links wert rechts;|x<=wert=B(insert links x)wert rechts;|x> wert=B links wert(insert rechts x)|isIn::Ord a=>a->Tree a->Bool;isIn x Empty=False;isIn x(B links wert rechts);|x==wert=True;|x<=wert=isIn x links;|x>wert=isIn x rechts|minElem::Ord a =>Tree a->a;minElem Empty=error"..";minElem(B Empty x _)=x;minElem(B links _ _)= minElem links|sortTree::Ord a=>Tree a->[a];sortTree Empty=[];sortTree(B links wert rechts)= sortTree links++[wert]++sortTree rechts||data(Orda)=>Stree a=Null | Fork(Stree a)a(Stree a) deriving (Ord,Eq,Show)|mkStree::Ord a=>[a]->Stree a;mkStree[]=Null;mkStree(x:xs)=Fork (mkStree smaller)x(mkStree larger);where(smaller,larger)=partition(<=x)xs;partition:: (a->Bool)->[a]->([a],[a]);partition p xs=([x|x<-xs, p x],[y|y<-xs,(not.p)y])