[Haskell-cafe] Quite confused by simple transformations on this code not working

wren ng thornton wren at freegeek.org
Tue Jan 20 23:10:30 EST 2009


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


More information about the Haskell-Cafe mailing list