| Copyright | (C) 2011-2015 Edward Kmett |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Trustworthy |
| Language | Haskell98 |
Data.Functor.Extend
Contents
Description
Synopsis
- class Functor w => Extend w where
- duplicated :: w a -> w (w a)
- extended :: (w a -> b) -> w a -> w b
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 where Source #
Minimal complete definition
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 b Source #
extended f = fmap f . duplicated