free-4.12.1: Monads for free

Copyright | (C) 2012 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | provisional
Portability | GADTs, Rank2Types
Safe Haskell | Safe
Language | Haskell2010

Control.Alternative.Free.Final

Description

Final encoding of free `Alternative` functors.

Synopsis

- newtype Alt f a = Alt {
  - _runAlt :: forall g. Alternative g => (forall x. f x -> g x) -> g a
  }
- runAlt :: forall f g a. Alternative g => (forall x. f x -> g x) -> Alt f a -> g a
- liftAlt :: f a -> Alt f a
- hoistAlt :: (forall a. f a -> g a) -> Alt f b -> Alt g b

# Documentation

newtype Alt f a Source

The free `Alternative` for a `Functor` `f`.

Constructors

Alt |

Fields

_runAlt :: forall g. Alternative g => (forall x. f x -> g x) -> g a

Instances

Functor (Alt f) Source |
Applicative (Alt f) Source |
Alternative (Alt f) Source |
Alt (Alt f) Source |
Apply (Alt f) Source |
Monoid (Alt f a) Source |
Semigroup (Alt f a) Source |

runAlt :: forall f g a. Alternative g => (forall x. f x -> g x) -> Alt f a -> g a Source

Given a natural transformation from `f` to `g`, this gives a canonical monoidal natural transformation from ``Alt` f` to `g`.

liftAlt :: f a -> Alt f a Source

A version of `lift` that can be used with `f`.

hoistAlt :: (forall a. f a -> g a) -> Alt f b -> Alt g b Source

Given a natural transformation from `f` to `g` this gives a monoidal natural transformation from `Alt f` to `Alt g`.