TypeCompose-0.9.14: Type composition classes & instances

Copyright(c) Conal Elliott 2007
LicenseBSD3
Maintainerconal@conal.net
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell98

Data.Partial

Contents

Description

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

Teaser
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.

Synopsis

Partial values

type Partial = Endo Source #

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 b Source #

valp :: c -> Partial c Source #

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

pval :: Partial c -> c Source #

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

Orphan instances

FunAble Partial Source # 
Instance details

Methods

arrFun :: (a -> b) -> Partial a -> Partial b Source #

firstFun :: (Partial a -> Partial a') -> Partial (a, b) -> Partial (a', b) Source #

secondFun :: (Partial b -> Partial b') -> Partial (a, b) -> Partial (a, b') Source #

(***%) :: (Partial a -> Partial b) -> (Partial a' -> Partial b') -> Partial (a, a') -> Partial (b, b') Source #

(&&&%) :: (Partial a -> Partial b) -> (Partial a -> Partial b') -> Partial a -> Partial (b, b') Source #