type-combinators-0.2.4.3: 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.Conjunction

Description

Two type combinators for working with conjunctions: A fanout combinator '(:&:)', and a par combinator '(:*:)'.

These are analogous to '(&&&)' and '(***)' from Arrow, respectively.

Documentation

data f :&: g :: k -> * where infixr 6 Source #

Constructors

(:&:) :: !(f a) -> !(g a) -> (f :&: g) a infixr 6 

Instances

Bifunctor1 m m m ((:&:) m) Source # 

Methods

bimap1 :: (forall a. f a -> h a) -> (forall a. g a -> i a) -> t f g b -> t h i b Source #

Traversable1 l l ((:&:) l f) Source # 

Methods

traverse1 :: Applicative h => (forall a. f a -> h (g a)) -> t f b -> h (t g b) Source #

Foldable1 l l ((:&:) l f) Source # 

Methods

foldMap1 :: Monoid m => (forall a. f a -> m) -> t f b -> m Source #

Functor1 l l ((:&:) l f) Source # 

Methods

map1 :: (forall a. f a -> g a) -> t f b -> t g b Source #

(Show1 k f, Show1 k g) => Show1 k ((:&:) k f g) Source # 

Methods

showsPrec1 :: Int -> f a -> ShowS Source #

show1 :: f a -> String Source #

(Ord1 k f, Ord1 k g) => Ord1 k ((:&:) k f g) Source # 

Methods

compare1 :: f a -> f a -> Ordering Source #

(<#) :: f a -> f a -> Bool Source #

(>#) :: f a -> f a -> Bool Source #

(<=#) :: f a -> f a -> Bool Source #

(>=#) :: f a -> f a -> Bool Source #

(Eq1 k f, Eq1 k g) => Eq1 k ((:&:) k f g) Source # 

Methods

eq1 :: f a -> f a -> Bool Source #

neq1 :: f a -> f a -> Bool Source #

(Known k f a, Known k g a) => Known k ((:&:) k f g) a Source # 

Associated Types

type KnownC ((:&:) k f g) (a :: (:&:) k f g -> *) (a :: (:&:) k f g) :: Constraint Source #

Methods

known :: a a Source #

(Witness p q (f a), Witness s t (g a)) => Witness (p, s) (q, t) ((:&:) k f g a) Source # 

Associated Types

type WitnessC ((p, s) :: Constraint) ((q, t) :: Constraint) ((:&:) k f g a) :: Constraint Source #

Methods

(\\) :: (p, s) => ((q, t) -> r) -> (k :&: f) g a -> r Source #

(Eq (f a), Eq (g a)) => Eq ((:&:) k f g a) Source # 

Methods

(==) :: (k :&: f) g a -> (k :&: f) g a -> Bool #

(/=) :: (k :&: f) g a -> (k :&: f) g a -> Bool #

(Ord (f a), Ord (g a)) => Ord ((:&:) k f g a) Source # 

Methods

compare :: (k :&: f) g a -> (k :&: f) g a -> Ordering #

(<) :: (k :&: f) g a -> (k :&: f) g a -> Bool #

(<=) :: (k :&: f) g a -> (k :&: f) g a -> Bool #

(>) :: (k :&: f) g a -> (k :&: f) g a -> Bool #

(>=) :: (k :&: f) g a -> (k :&: f) g a -> Bool #

max :: (k :&: f) g a -> (k :&: f) g a -> (k :&: f) g a #

min :: (k :&: f) g a -> (k :&: f) g a -> (k :&: f) g a #

(Read (f a), Read (g a)) => Read ((:&:) k f g a) Source # 

Methods

readsPrec :: Int -> ReadS ((k :&: f) g a) #

readList :: ReadS [(k :&: f) g a] #

readPrec :: ReadPrec ((k :&: f) g a) #

readListPrec :: ReadPrec [(k :&: f) g a] #

(Show (f a), Show (g a)) => Show ((:&:) k f g a) Source # 

Methods

showsPrec :: Int -> (k :&: f) g a -> ShowS #

show :: (k :&: f) g a -> String #

showList :: [(k :&: f) g a] -> ShowS #

type KnownC k ((:&:) k f g) a Source # 
type KnownC k ((:&:) k f g) a = ØC
type WitnessC (p, s) (q, t) ((:&:) k f g a) Source # 
type WitnessC (p, s) (q, t) ((:&:) k f g a) = (Witness p q (f a), Witness s t (g a))

fanFst :: (f :&: g) a -> f a Source #

fanSnd :: (f :&: g) a -> g a Source #

(.&.) :: (f a -> h b) -> (g a -> i b) -> (f :&: g) a -> (h :&: i) b infixr 3 Source #

fanFirst :: (f a -> g a) -> (f :&: h) a -> (g :&: h) a Source #

uncurryFan :: (f a -> g a -> r) -> (f :&: g) a -> r Source #

curryFan :: ((f :&: g) a -> r) -> f a -> g a -> r Source #

data f :*: g :: (k, l) -> * where infixr 6 Source #

Constructors

(:*:) :: !(f a) -> !(g b) -> (f :*: g) (a # b) infixr 6 

Instances

IxFunctor1 k (m, k) (IxSecond m k k ((:~:) k)) ((:*:) k m f) Source # 

Methods

imap1 :: (forall a. i b a -> f a -> g a) -> t f b -> t g b Source #

Bifunctor1 (k, l) l k ((:*:) l k) Source # 

Methods

bimap1 :: (forall a. f a -> h a) -> (forall a. g a -> i a) -> t f g b -> t h i b Source #

Traversable1 (k1, k) k ((:*:) k k1 f) Source # 

Methods

traverse1 :: Applicative h => (forall a. f a -> h (g a)) -> t f b -> h (t g b) Source #

Foldable1 (k1, k) k ((:*:) k k1 f) Source # 

Methods

foldMap1 :: Monoid m => (forall a. f a -> m) -> t f b -> m Source #

Functor1 (k1, k) k ((:*:) k k1 f) Source # 

Methods

map1 :: (forall a. f a -> g a) -> t f b -> t g b Source #

(Witness p q (f a), Witness s t (g b), (~) (k, l) x ((#) k l a b)) => Witness (p, s) (q, t) ((:*:) l k f g x) Source # 

Associated Types

type WitnessC ((p, s) :: Constraint) ((q, t) :: Constraint) ((:*:) l k f g x) :: Constraint Source #

Methods

(\\) :: (p, s) => ((q, t) -> r) -> (l :*: k) f g x -> r Source #

(DecEquality k f, DecEquality l g) => DecEquality (k, l) ((:*:) l k f g) Source # 

Methods

decideEquality :: f a -> f b -> Dec (((l :*: k) f g :~: a) b) Source #

(Show1 k f, Show1 l g) => Show1 (k, l) ((:*:) l k f g) Source # 

Methods

showsPrec1 :: Int -> f a -> ShowS Source #

show1 :: f a -> String Source #

(Ord1 k f, Ord1 l g) => Ord1 (k, l) ((:*:) l k f g) Source # 

Methods

compare1 :: f a -> f a -> Ordering Source #

(<#) :: f a -> f a -> Bool Source #

(>#) :: f a -> f a -> Bool Source #

(<=#) :: f a -> f a -> Bool Source #

(>=#) :: f a -> f a -> Bool Source #

(Eq1 k f, Eq1 l g) => Eq1 (k, l) ((:*:) l k f g) Source # 

Methods

eq1 :: f a -> f a -> Bool Source #

neq1 :: f a -> f a -> Bool Source #

((~) (k, l) p ((#) k l a b), Known k f a, Known l g b) => Known (k, l) ((:*:) l k f g) p Source # 

Associated Types

type KnownC ((:*:) l k f g) (p :: (:*:) l k f g -> *) (a :: (:*:) l k f g) :: Constraint Source #

Methods

known :: p a Source #

(Eq (f (Fst k l p)), Eq (g (Snd k l p))) => Eq ((:*:) l k f g p) Source # 

Methods

(==) :: (l :*: k) f g p -> (l :*: k) f g p -> Bool #

(/=) :: (l :*: k) f g p -> (l :*: k) f g p -> Bool #

(Ord (f (Fst k l p)), Ord (g (Snd k l p))) => Ord ((:*:) l k f g p) Source # 

Methods

compare :: (l :*: k) f g p -> (l :*: k) f g p -> Ordering #

(<) :: (l :*: k) f g p -> (l :*: k) f g p -> Bool #

(<=) :: (l :*: k) f g p -> (l :*: k) f g p -> Bool #

(>) :: (l :*: k) f g p -> (l :*: k) f g p -> Bool #

(>=) :: (l :*: k) f g p -> (l :*: k) f g p -> Bool #

max :: (l :*: k) f g p -> (l :*: k) f g p -> (l :*: k) f g p #

min :: (l :*: k) f g p -> (l :*: k) f g p -> (l :*: k) f g p #

((~) (k, l) p ((#) k l a b), Read (f a), Read (g b)) => Read ((:*:) l k f g p) Source # 

Methods

readsPrec :: Int -> ReadS ((l :*: k) f g p) #

readList :: ReadS [(l :*: k) f g p] #

readPrec :: ReadPrec ((l :*: k) f g p) #

readListPrec :: ReadPrec [(l :*: k) f g p] #

(Show (f (Fst k l p)), Show (g (Snd k l p))) => Show ((:*:) l k f g p) Source # 

Methods

showsPrec :: Int -> (l :*: k) f g p -> ShowS #

show :: (l :*: k) f g p -> String #

showList :: [(l :*: k) f g p] -> ShowS #

type WitnessC (p, s) (q, t) ((:*:) l k f g x) Source # 
type WitnessC (p, s) (q, t) ((:*:) l k f g x) = (Witness p q (f (Fst k l x)), Witness s t (g (Snd k l x)))
type KnownC (k, l) ((:*:) l k f g) p Source # 
type KnownC (k, l) ((:*:) l k f g) p = ØC

parFst :: (f :*: g) p -> f (Fst p) Source #

parSnd :: (f :*: g) p -> g (Snd p) Source #

uncurryPar :: (forall a b. p ~ (a # b) => f a -> g b -> r) -> (f :*: g) p -> r Source #

curryPar :: ((f :*: g) (a # b) -> r) -> f a -> g b -> r Source #

_fst :: ((a # b) :~: (c # d)) -> a :~: c Source #

_snd :: ((a # b) :~: (c # d)) -> b :~: d Source #

data f :&&: g where infixr 6 Source #

Constructors

(:&&:) :: !(f a) -> !(g a) -> f :&&: g infixr 6 

Instances

(TestEquality k f, TestEquality k g, Eq1 k f, Eq1 k g) => Eq ((:&&:) k f g) Source # 

Methods

(==) :: (k :&&: f) g -> (k :&&: f) g -> Bool #

(/=) :: (k :&&: f) g -> (k :&&: f) g -> Bool #

(TestEquality k f, TestEquality k g, Ord1 k f, Ord1 k g) => Ord ((:&&:) k f g) Source # 

Methods

compare :: (k :&&: f) g -> (k :&&: f) g -> Ordering #

(<) :: (k :&&: f) g -> (k :&&: f) g -> Bool #

(<=) :: (k :&&: f) g -> (k :&&: f) g -> Bool #

(>) :: (k :&&: f) g -> (k :&&: f) g -> Bool #

(>=) :: (k :&&: f) g -> (k :&&: f) g -> Bool #

max :: (k :&&: f) g -> (k :&&: f) g -> (k :&&: f) g #

min :: (k :&&: f) g -> (k :&&: f) g -> (k :&&: f) g #

(Show1 k f, Show1 k g) => Show ((:&&:) k f g) Source # 

Methods

showsPrec :: Int -> (k :&&: f) g -> ShowS #

show :: (k :&&: f) g -> String #

showList :: [(k :&&: f) g] -> ShowS #

exConjEq :: (TestEquality f, TestEquality g) => (f :&&: g) -> (f :&&: g) -> Maybe (f :&&: f, g :&&: g) Source #