-
Notifications
You must be signed in to change notification settings - Fork 259
Open
Description
Chapter 6 in the section "Polymorphism" claims that it is impossible to write a function of type (a -> b) -> f a -> f b
that doesn't satisfy forall f g. fmap f . fmap g = fmap (f . g)
. But this is false:
data F a = A a | B a
bad_fmap f (A x) = B (f x)
bad_fmap f (B x) = A (f x)
A result you do get from the free theorem for fmap
is that fmap id = id <==> forall f g. fmap f . fmap g = fmap (f . g)
; that is, if your fmap
satisfies one of the two functors laws then it necessarily satisfies the other one too. The above example satisfies neither.
TizianoCoroneo and jliese
Metadata
Metadata
Assignees
Labels
No labels