syntactic-1.15.1: Generic abstract syntax, and utilities for embedded languages

Safe HaskellNone
LanguageHaskell2010

Language.Syntactic.Sugar

Description

"Syntactic sugar"

Synopsis

Documentation

class Syntactic a where Source

It is usually assumed that (desugar (sugar a)) has the same meaning as a.

Associated Types

type Domain a :: * -> * Source

type Internal a Source

Methods

desugar :: a -> ASTF (Domain a) (Internal a) Source

sugar :: ASTF (Domain a) (Internal a) -> a Source

Instances

Syntactic (ASTF dom a) Source 
(Syntactic a, (~) (* -> *) (Domain a) dom, IsHODomain dom (Typeable *) pVar, InjectC (MONAD m) dom (m (Internal a)), Monad m, Typeable (* -> *) m, Typeable * (Internal a), pVar (Internal a)) => Syntactic (Mon dom m a) Source 

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.

Methods

desugarN :: a -> internal Source

sugarN :: internal -> a Source

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)