symantic-6.0.0.20170623: Library for Typed Tagless-Final Higher-Order Composable DSL

Safe HaskellNone
LanguageHaskell2010

Language.Symantic.Compiling.Module

Contents

Synopsis

Type Mod

data Mod a Source #

Constructors

Mod PathMod a 

Instances

Functor Mod Source # 

Methods

fmap :: (a -> b) -> Mod a -> Mod b #

(<$) :: a -> Mod b -> Mod a #

Eq a => Eq (Mod a) Source # 

Methods

(==) :: Mod a -> Mod a -> Bool #

(/=) :: Mod a -> Mod a -> Bool #

Ord a => Ord (Mod a) Source # 

Methods

compare :: Mod a -> Mod a -> Ordering #

(<) :: Mod a -> Mod a -> Bool #

(<=) :: Mod a -> Mod a -> Bool #

(>) :: Mod a -> Mod a -> Bool #

(>=) :: Mod a -> Mod a -> Bool #

max :: Mod a -> Mod a -> Mod a #

min :: Mod a -> Mod a -> Mod a #

Show a => Show (Mod a) Source # 

Methods

showsPrec :: Int -> Mod a -> ShowS #

show :: Mod a -> String #

showList :: [Mod a] -> ShowS #

Type PathMod

Type NameMod

Class ModuleFor

class ModuleFor src ss s where Source #

Methods

moduleFor :: (PathMod, Module src ss) Source #

Type Imports

Type Modules

newtype Modules src ss Source #

Constructors

Modules 

Fields

Instances

Source src => Eq (Modules src ss) Source # 

Methods

(==) :: Modules src ss -> Modules src ss -> Bool #

(/=) :: Modules src ss -> Modules src ss -> Bool #

Source src => Show (Modules src ss) Source # 

Methods

showsPrec :: Int -> Modules src ss -> ShowS #

show :: Modules src ss -> String #

showList :: [Modules src ss] -> ShowS #

unionModules :: Modules src ss -> Modules src ss -> Either Error_Module (Modules src ss) Source #

unionModulesUnchecked :: Modules src ss -> Modules src ss -> Modules src ss Source #

Type Error_Module

Type Module

data Module src ss Source #

Constructors

Module 

Instances

Source src => Eq (Module src ss) Source # 

Methods

(==) :: Module src ss -> Module src ss -> Bool #

(/=) :: Module src ss -> Module src ss -> Bool #

Source src => Show (Module src ss) Source # 

Methods

showsPrec :: Int -> Module src ss -> ShowS #

show :: Module src ss -> String #

showList :: [Module src ss] -> ShowS #

Semigroup (Module src ss) Source # 

Methods

(<>) :: Module src ss -> Module src ss -> Module src ss #

sconcat :: NonEmpty (Module src ss) -> Module src ss #

stimes :: Integral b => b -> Module src ss -> Module src ss #

module_fixity :: FixitySing fixy -> Module src ss -> ModuleFixy src ss fixy Source #

moduleWhere :: forall src ss. Source src => PathMod -> [DefTerm src ss] -> (PathMod, Module src ss) Source #

Type ModuleFixy

type ModuleFixy src ss fixy = Map NameTe (Tokenizer fixy src ss) Source #

Type Tokenizer

data Tokenizer fixy src ss Source #

Constructors

Tokenizer 

Fields

Instances

(Source src, Eq fixy) => Eq (Tokenizer fixy src ss) Source # 

Methods

(==) :: Tokenizer fixy src ss -> Tokenizer fixy src ss -> Bool #

(/=) :: Tokenizer fixy src ss -> Tokenizer fixy src ss -> Bool #

Source src => Show (Tokenizer fixy src ss) Source # 

Methods

showsPrec :: Int -> Tokenizer fixy src ss -> ShowS #

show :: Tokenizer fixy src ss -> String #

showList :: [Tokenizer fixy src ss] -> ShowS #

Type Token_Term

data Token_Term src ss Source #

Constructors

Token_Term (TermAVT src ss) 
Token_TermVT (TermVT src ss '[]) 
Token_Term_Abst src NameTe (AST_Type src) (AST_Term src ss) 
Token_Term_Var src NameTe 
Token_Term_Let src NameTe (AST_Term src ss) (AST_Term src ss) 
Token_Term_App src 

Instances

Source src => Eq (Token_Term src ss) Source # 

Methods

(==) :: Token_Term src ss -> Token_Term src ss -> Bool #

(/=) :: Token_Term src ss -> Token_Term src ss -> Bool #

Source src => Show (Token_Term src ss) Source # 

Methods

showsPrec :: Int -> Token_Term src ss -> ShowS #

show :: Token_Term src ss -> String #

showList :: [Token_Term src ss] -> ShowS #

Inj_Source (AST_Term (SrcTe inp ss) ss) (SrcTe inp ss) # 

Methods

inj_Source :: AST_Term (SrcTe inp ss) ss -> SrcTe inp ss #

Type NameTe

Type CtxTy

data CtxTy src ts where Source #

Typing context accumulating at each lambda abstraction the Type of the introduced variable. It is built top-down from the closest including lambda abstraction to the farest.

Constructors

CtxTyZ :: CtxTy src '[] 
CtxTyS :: NameTe -> Type src '[] t -> CtxTy src ts -> CtxTy src (t ': ts) infixr 5 

appendCtxTy :: CtxTy src ts0 -> CtxTy src ts1 -> CtxTy src (ts0 ++ ts1) Source #

Type AST_Term

type AST_Term src ss = BinTree (Token_Term src ss) Source #

Abstract Syntax Tree of Token_Term.

Class Inj_Modules

type Inj_Modules src ss = Inj_ModulesR src ss ss Source #

inj_Modules :: forall src ss. Inj_Modules src ss => Either Error_Module (Modules src ss) Source #

Class Inj_ModulesR

class Inj_ModulesR src ss rs where Source #

Minimal complete definition

inj_ModulesR

Instances

Inj_ModulesR src ss ([] *) Source # 
(ModuleFor k src ss s, Inj_ModulesR src ss rs) => Inj_ModulesR src ss ((:) * (Proxy k s) rs) Source # 

Type DefTerm

data DefTerm src ss Source #

Constructors

(:=) (WithFixity NameTe) (forall ts. Term src ss ts vs t) 

lookupDefTerm :: forall src ss fixy. FixitySing fixy -> Imports -> Mod NameTe -> Modules src ss -> Either Error_Module (Tokenizer fixy src ss) Source #

Lookup given Mod NameTe into the Infix TermDef of given Modules.

NOTE: Token_Term_App is returned for the space NameTe.

deleteDefTerm :: Mod NameTe -> Modules src ss -> Modules src ss Source #

Delete given Mod NameTe into given Modules.

deleteDefTermInfix :: Mod NameTe -> Modules src ss -> Modules src ss Source #

Delete given Mod NameTe into module_infixs of given Modules.

deleteDefTermPrefix :: Mod NameTe -> Modules src ss -> Modules src ss Source #

Delete given Mod NameTe into module_prefixs of given Modules.

deleteDefTermPostix :: Mod NameTe -> Modules src ss -> Modules src ss Source #

Delete given Mod NameTe into module_postfixs of given Modules.

insertDefTerm :: forall src ss. Source src => Mod (DefTerm src ss) -> Modules src ss -> Modules src ss Source #

insertTermVT :: forall src ss. Source src => Mod (TermVT src ss '[]) -> NameTe -> Fixity -> Modules src ss -> Modules src ss Source #

insertFixity :: (forall fx. fx -> ModuleFixy src ss fx -> ModuleFixy src ss fx) -> Fixity -> Module src ss -> Module src ss Source #

Type WithFixity

Type FixitySing

data FixitySing fixy where Source #

Instances

Eq (FixitySing fixy) Source # 

Methods

(==) :: FixitySing fixy -> FixitySing fixy -> Bool #

(/=) :: FixitySing fixy -> FixitySing fixy -> Bool #

Show (FixitySing fixy) Source # 

Methods

showsPrec :: Int -> FixitySing fixy -> ShowS #

show :: FixitySing fixy -> String #

showList :: [FixitySing fixy] -> ShowS #