Andrew Wagner wrote:
Strange little bit of code:
http://moonpatio.com:8080/fastcgi/hpaste.fcgi/view?id=829#a829

If I do any of the following, all of which seem natural to me, it fails to
typecheck:

   1. move f out of the 'where' clause (with or without a type signature)
   2. put the same type signature on f as is on (/\)
   3. replace f with (/\) completely

What's going on here?

    > :t (nub .) . (++)
    (nub .) . (++) :: (Eq a) => [a] -> [a] -> [a]

    > :t foldr (map . (nub .) . (++))
    foldr (map . (nub .) . (++)) :: (Eq a) => [[a]] -> [[a]] -> [[a]]

The type you give to (/\) is more restrictive than the type of the expression, and f uses the generality of the expression.

--
Live well,
~wren
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to