
20 Jan
2009
20 Jan
'09
11:10 p.m.
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