Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Monoids with holes. The HoleyMonoid
allows building monoidal values of which certain components are to be filled in later. For example:
> let holey :: (Show a, Show b) => HoleyMonoid String r (a -> b -> r) holey = now "x = " . later show . now ", y = " . later show > run holey 3 5 "x = 3, y = 5"
This module is intended to be imported in qualified fashion, e.g.
import qualified Data.HoleyMonoid as HM
- newtype HoleyMonoid m r a = HoleyMonoid {
- runHM :: (m -> r) -> a
- run :: HoleyMonoid m m a -> a
- now :: m -> HoleyMonoid m r r
- later :: (a -> m) -> HoleyMonoid m r (a -> r)
- bind :: HoleyMonoid m b c -> (m -> HoleyMonoid n a b) -> HoleyMonoid n a c
- map :: (m -> n) -> HoleyMonoid m r a -> HoleyMonoid n r a
Documentation
newtype HoleyMonoid m r a Source
The type of a monoid with holes. The underlying monoid is represented by
type parameter m
. The r
is the result type and stays polymorphic until the
very last moment when run
is called. The last argument a
is always a
function with zero or more arguments, finally resulting in r
. Ordering the
arguments in this order allows holey monoids to be composed using .
, stacking the
expected arguments. Note that the Monoid
constraint is only used in the
identity HoleyMonoid
and in composing two HoleyMonoid
s.
HoleyMonoid | |
|
Monoid m => Category * (HoleyMonoid m) | |
Monad (HoleyMonoid m r) | |
Functor (HoleyMonoid m r) | |
Applicative (HoleyMonoid m r) |
run :: HoleyMonoid m m a -> a Source
Run the computation, resulting in a function that still expects some
arguments. The number of arguments that is still expected will be equal to
the number of later
s the computation is built of.
now :: m -> HoleyMonoid m r r Source
Insert a constant monoidal value.
later :: (a -> m) -> HoleyMonoid m r (a -> r) Source
Insert a monoidal value that is not specified until the computation is
run
. The argument that is expected later is converted to the monoid type
using the given conversion function.
bind :: HoleyMonoid m b c -> (m -> HoleyMonoid n a b) -> HoleyMonoid n a c Source
Monadic indexed bind on the underlying Monoid
types.
map :: (m -> n) -> HoleyMonoid m r a -> HoleyMonoid n r a Source
Map between underlying Monoid
types.