Safe Haskell | None |
---|
"Syntactic sugar"
- class (Constrained dom, Sat dom (Internal a)) => Syntactic a dom | a -> dom where
- resugar :: (Syntactic a dom, Syntactic b dom, Internal a ~ Internal b) => a -> b
- class SyntacticN a internal | a -> internal where
- sugarSym :: (sym :<: AST dom, ApplySym sig b dom, SyntacticN c b) => sym sig -> c
- sugarSymC :: (InjectC sym (AST dom) (DenResult sig), ApplySym sig b dom, SyntacticN c b) => sym sig -> c
Documentation
class (Constrained dom, Sat dom (Internal a)) => Syntactic a dom | a -> dom whereSource
resugar :: (Syntactic a dom, Syntactic b dom, Internal a ~ Internal b) => a -> bSource
Syntactic type casting
class SyntacticN a internal | a -> internal whereSource
N-ary syntactic functions
desugarN
has any type of the form:
desugarN :: ( Syntactic a dom , Syntactic b dom , ... , Syntactic x dom ) => (a -> b -> ... -> x) -> ( ASTF dom (Internal a) -> ASTF dom (Internal b) -> ... -> ASTF dom (Internal x) )
...and vice versa for sugarN
.
(Syntactic a dom, ~ * ia (AST dom (Full (Internal a)))) => SyntacticN a ia | |
(Syntactic a dom, ~ * ia (Internal a), SyntacticN b ib) => SyntacticN (a -> b) (AST dom (Full ia) -> ib) |
sugarSym :: (sym :<: AST dom, ApplySym sig b dom, SyntacticN c b) => sym sig -> cSource
"Sugared" symbol application
sugarSym
has any type of the form:
sugarSym :: ( expr :<: AST dom , Syntactic a dom , Syntactic b dom , ... , Syntactic x dom ) => expr (Internal a :-> Internal b :-> ... :-> Full (Internal x)) -> (a -> b -> ... -> x)
sugarSymC :: (InjectC sym (AST dom) (DenResult sig), ApplySym sig b dom, SyntacticN c b) => sym sig -> cSource
"Sugared" symbol application
sugarSymC
has any type of the form:
sugarSymC :: ( InjectC expr (AST dom) (Internal x) , Syntactic a dom , Syntactic b dom , ... , Syntactic x dom ) => expr (Internal a :-> Internal b :-> ... :-> Full (Internal x)) -> (a -> b -> ... -> x)