
Someone correct me, if I'm mistaken but what seems to cause the problem is that the pattern matcher needs constructors, so it can determine, whether a pattern can produce an input data. Yes, I would agree with you on that. It seems correct to me.
Angelos
Date: Sat, 10 Mar 2012 12:45:07 +0100 From: Micha-Schober@web.de To: beginners@haskell.org Subject: Re: [Haskell-beginners] Empty or Tree?
But when I try to create a more generic code like this which could work with trees who don't have empty nodes in grandchild level :
function Node a (Node b Tree Tree) (Node c Tree Tree )
The problem is that 'Tree' is a type, not a constructor. Someone correct me, if I'm mistaken (this is my first post to the mailing-list, yieah :-)), but what seems to cause the problem is that the pattern matcher needs constructors, so it can determine, whether a pattern can produce an input data.
There are several solutions. If you don't need the further subtrees, leave them fully unspecified via the underscore:
function (Node a (Node b _ _) (Node c _ _)) = ...
or you could give them variable names like this:
function (Node a (Node b bl br) (Node c cl cr)) = ...
where bl, br, cl, and cr are variables of the type Tree. However, what you might want to accomplish is a recursive function over the recursive type to get a fully generic code. This usually looks something like this:
-- a generic recursive function cFunction :: Tree -> a cFunction Empty = ... cFunction (Node i l r) = f i (cFunction l) (cFunction r) where f :: Integer -> a -> a -> a f int recLeft recRight = ...
Hope that helped.
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners