module Data.HList.GhcSyntax where
import Data.HList.HArray (HUpdateAtHNat())
import Data.HList.FakePrelude
import Data.HList.HListPrelude
import Data.HList.HOccurs
import Data.HList.Record
import Data.HList.GhcRecord
import Data.HList.TIP
import Data.HList.TIC
infixr 2 :*:
infixr 2 .*.
type e :*: l = HCons e l
(.*.) :: HExtend e l l' => e -> l -> l'
(.*.) = hExtend
infixr 4 :=:
type l :=: v = LVPair l v
infixr 4 .=.
(.=.) :: l -> v -> LVPair l v
l .=. v = newLVPair l v
infixr 3 .!.
(.!.) :: (HasField l r v) => r -> l -> v
r .!. l = hLookupByLabel l r
infixl 1 .-.
(.-.) :: (H2ProjectByLabels (HCons e HNil) t t1 t2) => Record t -> e -> Record t2
r .-. l = hDeleteAtLabel l r
infixl 1 .@.
(.@.) :: (HUpdateAtHNat n (LVPair t t1) t2 l',
HFind t ls n,
RecordLabels t2 ls) =>
Record t2 -> LVPair t t1 -> Record l'
r .@. f@(LVPair v) = hUpdateAtLabel (labelLVPair f) v r
infixr 1 .^.
(.^.) :: (HasField t t2 (Proxy t1),
RecordLabels t2 ls,
HFind t ls n,
Data.HList.HArray.HUpdateAtHNat n (LVPair t t1) t2 l') =>
LVPair t t1 -> Record t2 -> Record l'
f@(LVPair v) .^. r = hUnproxyLabel (labelLVPair f) v r
infixr 1 .<.
(.<.) :: (HasField t t2 t1,
RecordLabels t2 ls,
HFind t ls n,
HUpdateAtHNat n (LVPair t t1) t2 l') =>
LVPair t t1 -> Record t2 -> Record l'
f@(LVPair v) .<. r = hTPupdateAtLabel (labelLVPair f) v r
infixl 1 .<++.
(.<++.) :: (HLeftUnion r r' r'') => r -> r' -> r''
r .<++. r' = hLeftUnion r r'
infixr 2 :+:
infixr 2 .+.
type e :+: l = HCons (Proxy e) l
(.+.) :: ( HTypeIndexed l
, HTypeProxied l
, HOccursNot (Proxy e) l
)
=> e -> TIP l -> TIP (HCons (Proxy e) l)
e .+. r = hExtend (toProxy e) r