
On 2014-04-02 12:53, Nishant wrote:
Can some explain me the error and a possibly a fix :
data Tree a = NULL | Node (Tree a ) a (Tree a)
instance Functor Tree where fmap f NULL = NULL fmap f (Node left x right) | (left == NULL) && (right == NULL) =
Node left (f x) right | (left /= NULL) = Node (fmap f left)
x right | (right /= NULL) = Node left x (fmap f right) Note that you can simplify your instance declaration to: instance Functor Tree where fmap f NULL = NULL fmap f (Node left x right) = Node (f' left) (f x) (f' right) where f' x = if x == NULL then NULL else fmap f x Also note that the NULL in the then clause differs from x. Let f :: a -> b, then x :: Tree a and the NULL in that clause :: Tree b. These values are as distinct as 2 :: Int and 2.0 :: Double. HTH, Gesh