data-rtuple-1.0: Recursive tuple data structure. It is very usefull when implementing some lo-level operations, allowing to traverse different elements using Haskell's type classes.

Safe HaskellNone
LanguageHaskell2010

Data.RTuple

Synopsis

Documentation

data RTuple a Source

Constructors

RTuple 

Fields

fromRTuple :: a
 

Instances

(ElAt ((-) n 1) (RTuple rs), (~) * (ElTypeAt n (RTuple (r, rs))) (ElTypeAt ((-) n 1) (RTuple rs))) => ElAt n (RTuple (r, rs)) Source 
ElAt 0 (RTuple (r, rs)) Source 
Eq a => Eq (RTuple a) Source 
Ord a => Ord (RTuple a) Source 
ShowRtup a => Show (RTuple a) Source 
Wrapped (RTuple a) Source 
Tail (RTuple (r, rs)) Source 
Head (RTuple (r, rs)) Source 
ToTuple (RTuple ()) () Source 
ToTuple (RTuple (t1, ())) t1 Source 
ToTuple (RTuple (t1, (t2, ()))) (t1, t2) Source 
ToTuple (RTuple (t1, (t2, (t3, ())))) (t1, t2, t3) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, ()))))) (t1, t2, t3, t4) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, ())))))) (t1, t2, t3, t4, t5) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, ()))))))) (t1, t2, t3, t4, t5, t6) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, ())))))))) (t1, t2, t3, t4, t5, t6, t7) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, ()))))))))) (t1, t2, t3, t4, t5, t6, t7, t8) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, ())))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, (t10, ()))))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, (t10, (t11, ())))))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, (t10, (t11, (t12, ()))))))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) Source 
UncurryTuple (RTuple () -> a) a Source 
UncurryTuple (RTuple xs -> f) fout => UncurryTuple (RTuple (x, xs) -> f) (x -> fout) Source 
type ElTypeAt n (RTuple (r, rs)) = If * ((:==) Nat n 0) r (ElTypeAt ((-) n 1) (RTuple rs)) Source 
type Unwrapped (RTuple a) = a Source 
type AsTuple (RTuple ()) = () Source 
type AsTuple (RTuple (t1, ())) = t1 Source 
type TailOf (RTuple (r, rs)) = RTuple rs Source 
type HeadOf (RTuple (r, rs)) = r Source 

data TList t a Source

Constructors

TList 

Fields

fromTList :: a
 

Instances

(ElAt ((-) n 1) (TList t rs), (~) * (ElTypeAt n (TList t (r, rs))) (ElTypeAt ((-) n 1) (TList t rs))) => ElAt n (TList t (r, rs)) Source 
(~) * t r => ElAt 0 (TList t (r, rs)) Source 
Eq a => Eq (TList t a) Source 
Ord a => Ord (TList t a) Source 
Wrapped (TList t a) Source 
Tail (TList a (r, rs)) Source 
(~) * a r => Head (TList a (r, rs)) Source 
type ElTypeAt n (TList t lst) = t Source 
type Unwrapped (TList t a) = a Source 
type TailOf (TList a (r, rs)) = TList a rs Source 
type HeadOf (TList a l) = a Source 

class ShowRtup r where Source

Methods

showRtup :: String -> r -> String Source

Instances

ShowRtup () Source 
(Show a, ShowRtup as) => ShowRtup (a, as) Source 
Show a => ShowRtup (a, ()) Source 

type family HeadOf a Source

Instances

type HeadOf (RTuple (r, rs)) = r Source 
type HeadOf (TList a l) = a Source 

class Head a where Source

Methods

head :: Lens' a (HeadOf a) Source

Instances

Head (RTuple (r, rs)) Source 
(~) * a r => Head (TList a (r, rs)) Source 

type family TailOf a Source

Instances

type TailOf (RTuple (r, rs)) = RTuple rs Source 
type TailOf (TList a (r, rs)) = TList a rs Source 

class Tail a where Source

Methods

tail :: Lens' a (TailOf a) Source

Instances

Tail (RTuple (r, rs)) Source 
Tail (TList a (r, rs)) Source 

class UncurryTuple f out | f -> out where Source

converts function taking a tuple list as argument into standard haskell one eg. `(a,(b,(c,()))) -> out` into `a -> b -> c -> out`

Methods

uncurryTuple :: f -> out Source

Instances

UncurryTuple (RTuple () -> a) a Source 
UncurryTuple (RTuple xs -> f) fout => UncurryTuple (RTuple (x, xs) -> f) (x -> fout) Source 

type family AsRTuple a Source

Instances

type AsRTuple [*] ([] *) = RTuple () Source 
type AsRTuple [*] ((:) * l ls) = RTuple (l, Unwrapped (AsRTuple [*] ls)) Source 

type family AsTListData t a Source

Instances

type AsTListData [*] t ([] *) = () Source 
type AsTListData [*] t ((:) * l ls) = (t, Unwrapped (AsTList [*] t ls)) Source 

type AsTList t lst = TList t (AsTListData t lst) Source

type family AsTuple a Source

Instances

type AsTuple (RTuple ()) = () Source 
type AsTuple (RTuple (t1, ())) = t1 Source 

class ToTuple a lst | a -> lst where Source

Methods

toTuple :: a -> lst Source

Instances

ToTuple (RTuple ()) () Source 
ToTuple (RTuple (t1, ())) t1 Source 
ToTuple (RTuple (t1, (t2, ()))) (t1, t2) Source 
ToTuple (RTuple (t1, (t2, (t3, ())))) (t1, t2, t3) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, ()))))) (t1, t2, t3, t4) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, ())))))) (t1, t2, t3, t4, t5) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, ()))))))) (t1, t2, t3, t4, t5, t6) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, ())))))))) (t1, t2, t3, t4, t5, t6, t7) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, ()))))))))) (t1, t2, t3, t4, t5, t6, t7, t8) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, ())))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, (t10, ()))))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, (t10, (t11, ())))))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) Source 
ToTuple (RTuple (t1, (t2, (t3, (t4, (t5, (t6, (t7, (t8, (t9, (t10, (t11, (t12, ()))))))))))))) (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) Source 

type family ElTypeAt idx a Source

Instances

type ElTypeAt n (RTuple (r, rs)) = If * ((:==) Nat n 0) r (ElTypeAt ((-) n 1) (RTuple rs)) Source 
type ElTypeAt n (TList t lst) = t Source 

class ElAt idx a where Source

Methods

elAt :: Proxy idx -> Lens' a (ElTypeAt idx a) Source

Instances

(ElAt ((-) n 1) (RTuple rs), (~) * (ElTypeAt n (RTuple (r, rs))) (ElTypeAt ((-) n 1) (RTuple rs))) => ElAt n (RTuple (r, rs)) Source 
ElAt 0 (RTuple (r, rs)) Source 
(ElAt ((-) n 1) (TList t rs), (~) * (ElTypeAt n (TList t (r, rs))) (ElTypeAt ((-) n 1) (TList t rs))) => ElAt n (TList t (r, rs)) Source 
(~) * t r => ElAt 0 (TList t (r, rs)) Source 

class ElAt' idx t where Source

Methods

elAt' :: Proxy idx -> Lens' (TList t lst) t Source