haskus-utils-0.8.0.0: Haskus utility modules

Safe HaskellNone
LanguageHaskell2010

Haskus.Utils.Variant

Contents

Description

Open sum type

Synopsis

Documentation

data Variant (l :: [*]) Source #

A variant contains a value whose type is at the given position in the type list

Instances

(Eq (Variant xs), Eq x) => Eq (Variant ((:) * x xs)) Source # 

Methods

(==) :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Bool #

(/=) :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Bool #

Eq (Variant ([] *)) Source # 

Methods

(==) :: Variant [*] -> Variant [*] -> Bool #

(/=) :: Variant [*] -> Variant [*] -> Bool #

(Ord (Variant xs), Ord x) => Ord (Variant ((:) * x xs)) Source # 

Methods

compare :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Ordering #

(<) :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Bool #

(<=) :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Bool #

(>) :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Bool #

(>=) :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Bool #

max :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Variant ((* ': x) xs) #

min :: Variant ((* ': x) xs) -> Variant ((* ': x) xs) -> Variant ((* ': x) xs) #

Ord (Variant ([] *)) Source # 

Methods

compare :: Variant [*] -> Variant [*] -> Ordering #

(<) :: Variant [*] -> Variant [*] -> Bool #

(<=) :: Variant [*] -> Variant [*] -> Bool #

(>) :: Variant [*] -> Variant [*] -> Bool #

(>=) :: Variant [*] -> Variant [*] -> Bool #

max :: Variant [*] -> Variant [*] -> Variant [*] #

min :: Variant [*] -> Variant [*] -> Variant [*] #

(Show (Variant xs), Show x) => Show (Variant ((:) * x xs)) Source # 

Methods

showsPrec :: Int -> Variant ((* ': x) xs) -> ShowS #

show :: Variant ((* ': x) xs) -> String #

showList :: [Variant ((* ': x) xs)] -> ShowS #

Show (Variant ([] *)) Source # 

Methods

showsPrec :: Int -> Variant [*] -> ShowS #

show :: Variant [*] -> String #

showList :: [Variant [*]] -> ShowS #

type V = Variant Source #

variantIndex :: Variant a -> Word Source #

Get Variant index

Patterns

pattern V :: forall c cs. Popable c cs => c -> Variant cs Source #

Make GHC consider l as a representational parameter to make coercions between Variant values unsafe

Pattern synonym for Variant

Usage: case v of V (x :: Int) -> ... V (x :: String) -> ...

pattern VMaybe :: forall c cs. MaybePopable c cs => c -> Variant cs Source #

Statically unchecked matching on a Variant

Operations by index

toVariantAt :: forall (n :: Nat) (l :: [*]). KnownNat n => Index n l -> Variant l Source #

Set the value with the given indexed type

toVariantHead :: forall x xs. x -> Variant (x ': xs) Source #

Set the first value

toVariantTail :: forall x xs. Variant xs -> Variant (x ': xs) Source #

Set the tail

fromVariantAt :: forall (n :: Nat) (l :: [*]). KnownNat n => Variant l -> Maybe (Index n l) Source #

Get the value if it has the indexed type

popVariantAt :: forall (n :: Nat) l. KnownNat n => Variant l -> Either (Variant (RemoveAt n l)) (Index n l) Source #

Pop a variant value by index, return either the value or the remaining variant

popVariantHead :: forall x xs. Variant (x ': xs) -> Either (Variant xs) x Source #

Pop the head of a variant value

updateVariantAt :: forall (n :: Nat) a b l. (KnownNat n, a ~ Index n l) => (a -> b) -> Variant l -> Variant (ReplaceN n b l) Source #

Update a variant value

foldMapVariantAt :: forall (n :: Nat) l l2. (KnownNat n, KnownNat (Length l2)) => (Index n l -> Variant l2) -> Variant l -> Variant (ReplaceAt n l l2) Source #

Update a variant value with a variant and fold the result

foldMapVariantAtM :: forall (n :: Nat) m l l2. (KnownNat n, KnownNat (Length l2), Monad m) => (Index n l -> m (Variant l2)) -> Variant l -> m (Variant (ReplaceAt n l l2)) Source #

Update a variant value with a variant and fold the result

Operations by type

toVariant :: forall a l. Member a l => a -> Variant l Source #

Put a value into a Variant

Use the first matching type index.

type Member x xs = (IsMember x xs ~ True, x ~ Index (IndexOf x xs) xs, KnownNat (IndexOf x xs)) Source #

Constraint: x member of xs

type family Filter a (l :: [*]) where ... Source #

Remove a in l

Equations

Filter a '[] = '[] 
Filter a (a ': as) = Filter a as 
Filter a (b ': as) = b ': Filter a as 

type Popable a xs = (Member a xs, PopVariant a xs) Source #

a is popable in xs

type MaybePopable a xs = PopVariant a xs Source #

a may be popable in xs

popVariant :: forall a xs. Popable a xs => Variant xs -> Either (Variant (Filter a xs)) a Source #

Extract a type from a variant. Return either the value of this type or the remaining variant

popVariantMaybe :: forall a xs. MaybePopable a xs => Variant xs -> Either (Variant (Filter a xs)) a Source #

Extract a type from a variant. Return either the value of this type or the remaining variant

fromVariant :: forall a xs. Popable a xs => Variant xs -> Maybe a Source #

Try to a get a value of a given type from a Variant

fromVariantMaybe :: forall a xs. MaybePopable a xs => Variant xs -> Maybe a Source #

Try to a get a value of a given type from a Variant that may not even support the given type.

fromVariantFirst :: forall a l. Member a l => Variant l -> Maybe a Source #

Pick the first matching type of a Variant

fromVariantFirst @A (Variant 2 undefined :: Variant '[A,B,A]) == Nothing

updateVariantFirst :: forall a b n l. (Member a l, n ~ IndexOf a l) => (a -> b) -> Variant l -> Variant (ReplaceN n b l) Source #

Update a variant value

updateVariantFirstM :: forall (n :: Nat) l l2 m. (KnownNat n, Monad m) => (Index n l -> m (Index n l2)) -> Variant l -> m (Variant l2) Source #

Monadic update of the first matching variant value

type MappableVariant a b cs = MapVariant a b cs (IndexesOf a cs) Source #

mapVariant :: forall a b cs. MappableVariant a b cs => (a -> b) -> Variant cs -> Variant (ReplaceNS (IndexesOf a cs) b cs) Source #

Map the matching types of a variant

foldMapVariantFirst :: forall a (n :: Nat) l l2. (KnownNat n, KnownNat (Length l2), n ~ IndexOf a l, a ~ Index n l) => (a -> Variant l2) -> Variant l -> Variant (ReplaceAt n l l2) Source #

Update a variant value with a variant and fold the result

foldMapVariantFirstM :: forall a (n :: Nat) l l2 m. (KnownNat n, KnownNat (Length l2), n ~ IndexOf a l, a ~ Index n l, Monad m) => (a -> m (V l2)) -> V l -> m (V (ReplaceAt n l l2)) Source #

Update a variant value with a variant and fold the result

foldMapVariant :: forall a cs ds i. (i ~ IndexOf a cs, Popable a cs) => (a -> V ds) -> V cs -> V (InsertAt i (Filter a cs) ds) Source #

Update a variant value with a variant and fold the result

Generic operations with type classes

class AlterVariant c (b :: [*]) where Source #

Minimal complete definition

alterVariant'

Methods

alterVariant' :: Alter c -> Word -> Any -> Any Source #

Instances

AlterVariant c ([] *) Source # 

Methods

alterVariant' :: Alter c -> Word -> Any * -> Any * Source #

(AlterVariant c xs, c x) => AlterVariant c ((:) * x xs) Source # 

Methods

alterVariant' :: Alter c -> Word -> Any * -> Any * Source #

class TraverseVariant c (b :: [*]) m where Source #

Minimal complete definition

traverseVariant'

Methods

traverseVariant' :: AlterM c m -> Word -> Any -> m Any Source #

Instances

TraverseVariant c ([] *) m Source # 

Methods

traverseVariant' :: AlterM c m -> Word -> Any * -> m (Any *) Source #

(TraverseVariant c xs m, c x, Monad m) => TraverseVariant c ((:) * x xs) m Source # 

Methods

traverseVariant' :: AlterM c m -> Word -> Any * -> m (Any *) Source #

class NoConstraint a Source #

Useful to specify a "* -> Constraint" function returning no constraint

Instances

alterVariant :: forall c (a :: [*]). AlterVariant c a => (forall x. c x => x -> x) -> Variant a -> Variant a Source #

Alter a variant. You need to specify the constraints required by the modifying function.

Usage: alterVariant NoConstraint id v alterVariant Resizable (resize 4) v

class (Ord a, Num a) => OrdNum a instance (Ord a, Num a) => OrdNum a

traverseVariant :: forall c (a :: [*]) m. (TraverseVariant c a m, Monad m) => (forall x. c x => x -> m x) -> Variant a -> m (Variant a) Source #

Traverse a variant. You need to specify the constraints required by the modifying function.

traverseVariant_ :: forall c (a :: [*]) m. (TraverseVariant c a m, Monad m) => (forall x. c x => x -> m ()) -> Variant a -> m () Source #

Traverse a variant. You need to specify the constraints required by the modifying function.

Conversions between variants

appendVariant :: forall (ys :: [*]) (xs :: [*]). Variant xs -> Variant (Concat xs ys) Source #

Extend a variant by appending other possible values

prependVariant :: forall (ys :: [*]) (xs :: [*]). KnownNat (Length ys) => Variant xs -> Variant (Concat ys xs) Source #

Extend a variant by prepending other possible values

type Liftable xs ys = (IsSubset xs ys ~ True, VariantLift xs ys) Source #

xs is liftable in ys

liftVariant :: forall xs ys. Liftable xs ys => Variant xs -> Variant ys Source #

Lift a variant into another

Set values to the first matching type

nubVariant :: Liftable xs (Nub xs) => V xs -> V (Nub xs) Source #

Nub the type list

Conversions to/from other data types

variantToValue :: Variant '[a] -> a Source #

Retreive a single value

variantToEither :: forall a b. Variant '[a, b] -> Either b a Source #

Convert a variant of two values in a Either

variantFromEither :: Either a b -> Variant '[b, a] Source #

Lift an Either into a Variant (reversed order by convention)

variantToHList :: VariantToHList xs => Variant xs -> HList (MapMaybe xs) Source #

Convert a variant into a HList of Maybes

variantToTuple :: forall l t. (VariantToHList l, HTuple' (MapMaybe l) t) => Variant l -> t Source #

Get variant possible values in a tuple of Maybe types

Continuations

class ContVariant xs where Source #

Methods

variantToCont :: Variant xs -> ContFlow xs r Source #

Convert a variant into a multi-continuation

variantToContM :: Monad m => m (Variant xs) -> ContFlow xs (m r) Source #

Convert a variant into a multi-continuation

contToVariant :: ContFlow xs (Variant xs) -> Variant xs Source #

Convert a multi-continuation into a Variant

contToVariantM :: Monad m => ContFlow xs (m (Variant xs)) -> m (Variant xs) Source #

Convert a multi-continuation into a Variant

Instances

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ((:) * g ((:) * h ((:) * i ((:) * j ((:) * k ((:) * l ([] *))))))))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*]))))))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*]))))))))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*])))))))))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) ((* ': l) [*]))))))))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ((:) * g ((:) * h ((:) * i ((:) * j ((:) * k ([] *)))))))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*])))))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*])))))))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*]))))))))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) ((* ': k) [*])))))))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ((:) * g ((:) * h ((:) * i ((:) * j ([] *))))))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*]))))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*]))))))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*])))))))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) ((* ': j) [*]))))))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ((:) * g ((:) * h ((:) * i ([] *)))))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*])))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*])))))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*]))))))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) ((* ': i) [*])))))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ((:) * g ((:) * h ([] *))))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*]))))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*]))))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*])))))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) ((* ': h) [*]))))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ((:) * g ([] *)))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*])))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*])))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*]))))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) ((* ': g) [*])))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ((:) * f ([] *))))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*]))))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*]))))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*])))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) ((* ': f) [*]))))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ((:) * e ([] *)))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*])))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*])))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*]))))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) ((* ': e) [*])))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ((:) * d ([] *))))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*]))))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))) (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*]))))) -> Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))) (m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*])))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) ((* ': d) [*]))))) Source #

ContVariant ((:) * a ((:) * b ((:) * c ([] *)))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) ((* ': c) [*]))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) [*]))) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) ((* ': c) [*])))) -> ContFlow ((* ': a) ((* ': b) ((* ': c) [*]))) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) ((* ': c) [*]))) (Variant ((* ': a) ((* ': b) ((* ': c) [*])))) -> Variant ((* ': a) ((* ': b) ((* ': c) [*]))) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) ((* ': c) [*]))) (m (Variant ((* ': a) ((* ': b) ((* ': c) [*]))))) -> m (Variant ((* ': a) ((* ': b) ((* ': c) [*])))) Source #

ContVariant ((:) * a ((:) * b ([] *))) Source # 

Methods

variantToCont :: Variant ((* ': a) ((* ': b) [*])) -> ContFlow ((* ': a) ((* ': b) [*])) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) ((* ': b) [*]))) -> ContFlow ((* ': a) ((* ': b) [*])) (m r) Source #

contToVariant :: ContFlow ((* ': a) ((* ': b) [*])) (Variant ((* ': a) ((* ': b) [*]))) -> Variant ((* ': a) ((* ': b) [*])) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) ((* ': b) [*])) (m (Variant ((* ': a) ((* ': b) [*])))) -> m (Variant ((* ': a) ((* ': b) [*]))) Source #

ContVariant ((:) * a ([] *)) Source # 

Methods

variantToCont :: Variant ((* ': a) [*]) -> ContFlow ((* ': a) [*]) r Source #

variantToContM :: Monad m => m (Variant ((* ': a) [*])) -> ContFlow ((* ': a) [*]) (m r) Source #

contToVariant :: ContFlow ((* ': a) [*]) (Variant ((* ': a) [*])) -> Variant ((* ': a) [*]) Source #

contToVariantM :: Monad m => ContFlow ((* ': a) [*]) (m (Variant ((* ': a) [*]))) -> m (Variant ((* ': a) [*])) Source #