TypeCompose-0.9.1: Type composition classes & instances

Safe HaskellSafe-Infered




A monoid Partial of partial values. See the [Teaser] and [Solution] blog posts.

: http://conal.net/blog/posts/a-type-for-partial-values [Solution]: http://conal.net/blog/posts/implementing-a-type-for-partial-values

Also defines a FunAble instance, so that FunA Partial is an arrow.


Partial values

type Partial = EndoSource

Partial value. Represented an endomorphism, which is a Monoid under id and '(.)'. Then mempty is the completely undefined value, and in u `@'mappend'@` v, v selectively replaces parts of u. The Endo instances for Pair, Unpair, Copair, Unfun, and Cofun are all very useful on partial values.

type PartialX a b = Partial a -> Partial bSource

valp :: c -> Partial cSource

Treat a full value as a partial one. Fully overrides any "previous" (earlier argument to mappend) partial value.

pval :: Partial c -> cSource

Force a partial value into a full one, filling in bottom for any missing parts.

pUnElt :: Functor f => PartialX a (f a)Source

Inverse to "element" access, on all elements. A way to inject some info about every element. For f, consider '[]', (->) a, Event, etc.

pUnArg :: PartialX u (u -> v)Source

Provide in info about a function argument

pUnRes :: PartialX v (u -> v)Source

Provide info about a function result

pUnSrc :: PartialX a ((a -> b) -> o)Source

Inject a partial argument-source into a partial function-sink.

Support for arrow partial value arrow