Skip to content

Error in characterization of free theorem for functors #104

@dfoxfranke

Description

@dfoxfranke

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions