Lazy functors and friends

Max Bolingbroke batterseapower at hotmail.com
Sun Jun 5 17:06:23 CEST 2011


On 5 June 2011 11:28, Henning Thielemann <lemming at henning-thielemann.de> wrote:
> What do you think of it? Are there more laws that would be reasonable?

Jeremy Gibbons articulated a good set of laws, which unfortunately
have not made their way into the documentation. See Section 5 of
http://www.cs.ox.ac.uk/jeremy.gibbons/publications/iterator.pdf

Paraphrasing, the laws are:

  1. Identity (as you proposed): sequenceA . fmap Id = Id
  2. Composition: sequenceA . fmap Comp = Comp . fmap sequenceA . sequenceA
  3. Naturality. For "applicative functor transformation" phi, we
have: sequenceA . fmap phi = phi ◦ sequenceA

Where an applicative functor transformation phi :: m a -> n a is a
function that respects:
    a) phi (pure a) = pure a
    b) phi (mf <*> mx) = phi mf <*> phi mx

Cheers,
Max



More information about the Libraries mailing list