type-combinators-0.1.2.1: A collection of data types for type-level programming

CopyrightCopyright (C) 2015 Kyle Carter
LicenseBSD3
MaintainerKyle Carter <kylcarte@indiana.edu>
Stabilityexperimental
PortabilityRankNTypes
Safe HaskellNone
LanguageHaskell2010

Data.Type.Disjunction

Description

Two type combinators for working with disjunctions: A branch combinator '(:+:)', and a choice combinator '(:|:)'.

These are analogous to '(+++)' and '(|||)' from Arrow, respectively.

Documentation

data f :+: g :: k -> * where infixr 4 Source

Constructors

L :: !(f a) -> (f :+: g) a 
R :: !(g a) -> (f :+: g) a 

Instances

HBifunctor k k k ((:+:) k) Source 
HTraversable k k ((:+:) k f) Source 
HFoldable k k ((:+:) k f) Source 
HFunctor k k ((:+:) k f) Source 
(Witness p q (f a), Witness p q (g a)) => Witness p q ((:+:) k f g a) Source 
type WitnessC p q ((:+:) k f g a) = (Witness p q (f a), Witness p q (g a)) Source 

(>+<) :: (f a -> r) -> (g a -> r) -> (f :+: g) a -> r infixr 2 Source

data f :|: g :: Either k l -> * where infixr 4 Source

Constructors

L' :: !(f a) -> (f :|: g) (Left a) 
R' :: !(g b) -> (f :|: g) (Right b) 

Instances

HBifunctor k k (Either k k) ((:|:) k k) Source 
Witness p q (g b) => Witness p q ((:|:) k k f g (Right k k b)) Source 
Witness p q (f a) => Witness p q ((:|:) k k f g (Left k k a)) Source 
HTraversable k (Either k k) ((:|:) k k f) Source 
HFoldable k (Either k k) ((:|:) k k f) Source 
HFunctor k (Either k k) ((:|:) k k f) Source 
Known k1 g b => Known (Either k k) ((:|:) k k f g) (Right k k b) Source 
Known k1 f a => Known (Either k k) ((:|:) k k f g) (Left k k a) Source 
type WitnessC p q ((:|:) k k1 f g (Right k k1 b)) = Witness p q (g b) Source 
type WitnessC p q ((:|:) k1 k f g (Left k1 k a)) = Witness p q (f a) Source 
type KnownC (Either k k1) ((:|:) k k1 f g) (Right k k1 b) = Known k1 g b Source 
type KnownC (Either k1 k) ((:|:) k1 k f g) (Left k1 k a) = Known k1 f a Source 

(>|<) :: (forall a. (e ~ Left a) => f a -> r) -> (forall b. (e ~ Right b) => g b -> r) -> (f :|: g) e -> r infixr 2 Source