| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Language.Syntactic.Sugar
Description
"Syntactic sugar"
- class Syntactic a where
- resugar :: (Syntactic a, Syntactic b, Domain a ~ Domain b, 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
resugar :: (Syntactic a, Syntactic b, Domain a ~ Domain b, Internal a ~ Internal b) => a -> b Source
Syntactic type casting
class SyntacticN a internal | a -> internal where Source
N-ary syntactic functions
desugarN has any type of the form:
desugarN ::
( Syntactic a
, Syntactic b
, ...
, Syntactic x
, Domain a ~ dom
, Domain b ~ dom
, ...
, Domain x ~ dom
) => (a -> b -> ... -> x)
-> ( ASTF dom (Internal a)
-> ASTF dom (Internal b)
-> ...
-> ASTF dom (Internal x)
)...and vice versa for sugarN.
Instances
| (Syntactic a, (~) (* -> *) (Domain a) dom, (~) * ia (AST dom (Full (Internal a)))) => SyntacticN a ia Source | |
| (Syntactic a, (~) (* -> *) (Domain a) dom, (~) * ia (Internal a), SyntacticN b ib) => SyntacticN (a -> b) (AST dom (Full ia) -> ib) Source |
sugarSym :: (sym :<: AST dom, ApplySym sig b dom, SyntacticN c b) => sym sig -> c Source
"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 -> c Source
"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)