semigroupoids-4.0.1: Semigroupoids: Category sans id

Portabilityportable
Stabilityprovisional
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellSafe

Data.Functor.Extend

Contents

Description

 

Synopsis

Extendable Functors

There are two ways to define an Extend instance:

I. Provide definitions for extended satisfying this law:

 extended f . extended g = extended (f . extended g)

II. Alternately, you may choose to provide definitions for duplicated satisfying this law:

 duplicated . duplicated = fmap duplicated . duplicated

You may of course, choose to define both duplicated and extended. In that case you must also satisfy these laws:

 extended f = fmap f . duplicated
 duplicated = extended id

These are the default definitions of extended and duplicated.

class Functor w => Extend w whereSource

Methods

duplicated :: w a -> w (w a)Source

 duplicated = extended id
 fmap (fmap f) . duplicated = duplicated . fmap f

extended :: (w a -> b) -> w a -> w bSource

 extended f  = fmap f . duplicated

Instances