HList-0.2.3: Heterogeneous lists

Safe HaskellNone

Data.HList.HArray

Contents

Description

The HList library

(C) 2004, Oleg Kiselyov, Ralf Laemmel, Keean Schupke

Array-like access to HLists.

Synopsis

Lookup

class HNat n => HLookupByHNat n l e | n l -> e where

Methods

hLookupByHNat :: n -> l -> e

Instances

HNat HZero => HLookupByHNat HZero (HCons e l) e 
(HNat (HSucc n), HLookupByHNat n l e', HNat n) => HLookupByHNat (HSucc n) (HCons e l) e' 

Delete

class HNat n => HDeleteAtHNat n l l' | n l -> l' where

Methods

hDeleteAtHNat :: n -> l -> l'

Instances

HNat HZero => HDeleteAtHNat HZero (HCons e l) l 
(HNat (HSucc n), HDeleteAtHNat n l l', HNat n) => HDeleteAtHNat (HSucc n) (HCons e l) (HCons e l') 

Update

class HNat n => HUpdateAtHNat n e l l' | n e l -> l', l' n -> e where

Methods

hUpdateAtHNat :: n -> e -> l -> l'

Instances

HNat HZero => HUpdateAtHNat HZero e' (HCons e l) (HCons e' l) 
(HNat (HSucc n), HUpdateAtHNat n e' l l', HNat n) => HUpdateAtHNat (HSucc n) e' (HCons e l) (HCons e l') 

Splitting

hSplitByHNats :: (HMap (HAddTag HTrue) l1 l, HSplitByHNats' ns l l' l'') => ns -> l1 -> (l', l'')

Splitting an array according to indices

Signature is inferred:

 hSplitByHNats :: (HSplitByHNats' ns l' l'1 l'', HMap (HAddTag HTrue) l l') =>
               ns -> l -> (l'1, l'')

class HNats ns => HSplitByHNats' ns l l' l'' | ns l -> l' l'' where

Methods

hSplitByHNats' :: ns -> l -> (l', l'')

Instances

(HNats HNil, HSplit l l' l'') => HSplitByHNats' HNil l HNil l' 
(HNats (HCons n ns), HLookupByHNat n l (e, b), HUpdateAtHNat n (e, HFalse) l l''', HSplitByHNats' ns l''' l' l'') => HSplitByHNats' (HCons n ns) l (HCons e l') l'' 

Projection

class HNats ns => HProjectByHNats ns l l' | ns l -> l' where

Methods

hProjectByHNats :: ns -> l -> l'

Instances

Complement of Projection

class HProjectAwayByHNats ns l l' | ns l -> l' where

Methods

hProjectAwayByHNats :: ns -> l -> l'

Instances

(HLength l len, HBetween len nats, HDiff nats ns ns', HProjectByHNats ns' l l') => HProjectAwayByHNats ns l l' 

Enumerate naturals

class HBetween x y | x -> y where

from 1 to x - 1

Methods

hBetween :: x -> y

Instances

Set-difference on naturals

class HDiff x y z | x y -> z where

Methods

hDiff :: x -> y -> z

Instances

HDiff HNil x HNil 
(HOrdMember e y b, HDiff x y z, HCond b z (HCons e z) z') => HDiff (HCons e x) y z' 

Membership test for types with HOrd instances

class HOrdMember e l b | e l -> b where

This special type equality/comparison is entirely pure!

Methods

hOrdMember :: e -> l -> b

Instances

HOrdMember e HNil HFalse 
(HEq e e' b1, HOrdMember e l b2, HOr b1 b2 b) => HOrdMember e (HCons e' l) b 

Length

class (HList l, HNat n) => HLength l n | l -> n

Instances

HLength HNil HZero 
(HList (HCons a l), HNat (HSucc n), HLength l n, HNat n, HList l) => HLength (HCons a l) (HSucc n) 

hLength :: HLength l n => l -> n

Bounded lists

class HMaxLength l s

Instances

(HLength l s', HLt s' (HSucc s) HTrue) => HMaxLength l s 

class HMinLength l s

Instances

(HLength l s', HLt s (HSucc s') HTrue) => HMinLength l s 

class HSingleton l

Instances

hSingle :: (HSingleton l, HHead l e) => l -> e