[Haskell-cafe] Possible Improvements
felipe.lessa at gmail.com
Mon Dec 3 18:45:10 EST 2007
On Dec 3, 2007 9:23 PM, <ajb at spamcop.net> wrote:
> 2. If it's logically a Functor, strictness will break the axioms,
> so don't do that.
What do you mean by breaking the axioms? If I define
> data List a = Nil | Cons !a !(List a)
> instance Functor List where
> fmap f Nil = Nil
> fmap f (Cons x xs) = Cons (f x) (fmap f xs)
Then the laws
1) fmap id == id
2) fmap f . fmap g == fmap (f . g)
won't hold? What am I missing here? Are there some bottoms hiding out?
Oh, I think I saw one! Let
> f x = 1
> g x = _|_
> l = Cons 2 Nil
> fmap f (fmap g l) == fmap f (Cons _|_ Nil) == fmap f _|_ == _|_
> fmap (f . g) l == Cons (f (g 2)) Nil == Cons (f _|_) Nil == Cons 1 Nil
right? Very interesting. Is this written somewhere on the wiki?
More information about the Haskell-Cafe