pec-0.1: pec embedded compiler

Pec.Base

Documentation

data V a Source

Constructors

V String 

data Decl a Source

Constructors

Decl Id (Term a) 

data Ptr a Source

Instances

Typed a => Typed (Ptr a) 

data Tag a cnt Source

Instances

(Typed a, Count cnt) => Typed (Tag a cnt) 

data Idx cnt Source

Instances

Count cnt => INT (Idx cnt) 
Count cnt => Typed (Idx cnt) 

data Array cnt a Source

Instances

(Typed a, Count cnt) => Typed (Array cnt a) 

data I cnt Source

Instances

Count cnt => INT (I cnt) 
Count cnt => Typed (I cnt) 
Count cnt => Tagged (I cnt) cnt 

data W cnt Source

Instances

Count cnt => INT (W cnt) 
Count cnt => Typed (W cnt) 
Count cnt => Tagged (W cnt) cnt 

data Cnt256 Source

Constructors

Cnt256 

data SuccCnt cnt Source

Instances

Count cnt => Typed (SuccCnt cnt) 
Count cnt => Count (SuccCnt cnt) 

data Term a whereSource

Constructors

Arg :: (Typed a, Typed b) => Id -> (Term a -> Term b) -> Term (a -> b) 
Val :: Typed a => V a -> Term a 
App :: (Typed a, Typed b) => Term (a -> b) -> Term a -> Term b 
Lift :: Typed a => M (Term a) -> Term a 

data St Source

Constructors

St 

type M a = StateT St IO aSource

type W_ a = W aSource

type I_ a = I aSource

class Count cnt whereSource

Methods

countof :: cnt -> IntegerSource

Instances

class (Count cnt, Typed a) => Tagged a cnt | a -> cnt whereSource

Methods

tagof :: Term a -> Term (Tag a cnt)Source

Instances

Tagged Char Cnt256 
Tagged IString CntW32 
Count cnt => Tagged (W cnt) cnt 
Count cnt => Tagged (I cnt) cnt 

class Typed a whereSource

Methods

typeof :: a -> TySource

callt :: Id -> [(Id, Ty)] -> Term aSource

Instances

Typed Char 
Typed Double 
Typed Float 
Typed () 
Typed IString 
Count cnt => Typed (SuccCnt cnt) 
Count cnt => Typed (W cnt) 
Count cnt => Typed (I cnt) 
Count cnt => Typed (Idx cnt) 
Typed a => Typed (Ptr a) 
(Typed a, Typed b) => Typed (a -> b) 
(Typed a, Typed b) => Typed (a, b) 
(Typed a, Count cnt) => Typed (Array cnt a) 
(Typed a, Count cnt) => Typed (Tag a cnt) 

class (Typed a, Typed b) => Newtype a b | a -> b whereSource

Methods

unwrap_ :: Term (a -> b)Source

unwrap_ptr_ :: Term (Ptr a -> Ptr b)Source

class INT a whereSource

Methods

int :: Integer -> Term aSource

Instances

Count cnt => INT (W cnt) 
Count cnt => INT (I cnt) 
Count cnt => INT (Idx cnt) 

uint :: (Count cnt, Typed (f cnt)) => f cnt -> Integer -> Term (f cnt)Source

sint :: (Count cnt, Typed (f cnt)) => f cnt -> Integer -> Term (f cnt)Source

wrap :: (Typed a, Typed b) => Term (a -> b)Source

unwrap2 :: (Newtype a b, Typed c) => (Term b -> Term b -> Term c) -> Term a -> Term a -> Term cSource

cast :: (Typed a, Typed b) => Term a -> Term bSource

tagofp :: (Typed a, Count cnt) => Term (Ptr a) -> Term (Tag (Ptr a) cnt)Source

alt0 :: (Typed a, Typed b) => (Term () -> Term b) -> Term a -> Term bSource

alt :: (Typed a, Typed b, Typed c) => (Term (Ptr b) -> Term c) -> Term (Ptr a) -> Term cSource

constr :: (Typed a, Count cnt, Typed b) => Term (Tag (Ptr a) cnt) -> Term (b -> a)Source

constr0 :: (Typed a, Count cnt) => Term (Tag (Ptr a) cnt) -> Term aSource

tagp :: (Typed a, Count cnt) => Term (Ptr a) -> Term (Ptr (Tag (Ptr a) cnt))Source

datap :: (Typed a, Typed b) => Term (Ptr a) -> Term (Ptr b)Source

bitcast :: (Typed a, Typed b) => Term (Ptr a) -> Term (Ptr b)Source

gep :: (Typed a, Typed b) => Term i -> Term (Ptr a) -> Term (Ptr b)Source

load :: Typed a => Term (Ptr a) -> Term aSource

prim2 :: (Typed a, Typed b, Typed c) => String -> Term a -> Term b -> Term cSource

store :: Typed a => Term (Ptr a) -> Term a -> Term ()Source

pair :: (Typed a, Typed b) => Term a -> Term b -> Term (a, b)Source

fst_get :: (Typed a, Typed b) => Term (Ptr (a, b)) -> Term (Ptr a)Source

snd_get :: (Typed a, Typed b) => Term (Ptr (a, b)) -> Term (Ptr b)Source

fst_ :: (Typed a, Typed b) => Term (Ptr (a, b) -> Ptr a)Source

snd_ :: (Typed a, Typed b) => Term (Ptr (a, b) -> Ptr b)Source

array :: (Count cnt, Typed a) => Term cnt -> [Term a] -> Term (Array cnt a)Source

new_ :: Typed a => Term (a -> Ptr a)Source

alloca :: Typed a => Term a -> Term (Ptr a)Source

new :: Typed a => Term a -> Term (Ptr a)Source

lam3_ :: (Typed a, Typed b, Typed c, Typed d) => (Term a -> Term b -> Term c -> Term d) -> Term (a -> b -> c -> d)Source

lam2_ :: (Typed a, Typed b, Typed c) => (Term a -> Term b -> Term c) -> Term (a -> b -> c)Source

app3 :: (Typed a, Typed b, Typed c, Typed d) => Term (a -> b -> c -> d) -> Term a -> Term b -> Term c -> Term dSource

app2 :: (Typed a, Typed b, Typed c) => Term (a -> b -> c) -> Term a -> Term b -> Term cSource

arg :: (Typed a, Typed b) => Id -> (Term a -> Term b) -> Term (a -> b)Source

unitarg :: Typed a => Term a -> Term (() -> a)Source

args :: [(Id, Ty)] -> StringSource

argsof :: Typed a => Term a -> [(Id, Ty)]Source

define :: Typed a => Decl a -> M ()Source

switch :: (Tagged a cnt, Typed b) => Term a -> [(Term (Tag a cnt), Term a -> Term b)] -> Term bSource

phi :: Typed a => [(V a, Label)] -> Term aSource

phi_arg :: Typed a => (V a, Label) -> StringSource

eval_alt :: (Typed a, Typed b) => Term a -> Label -> ((z, Term a -> Term b), Label) -> M (V b, Label)Source

app :: (Typed a, Typed b) => Term (a -> b) -> Term a -> Term bSource

evalv :: Term a -> M (V a)Source

reduce :: Term a -> M (Term a)Source

val :: Typed a => String -> Term aSource

tof :: Typed a => V a -> StringSource

proc :: Typed a => Id -> Term a -> Decl aSource

lift :: Typed a => M (Term a) -> Term aSource

extern :: Typed a => Id -> Decl aSource

idx :: (Count cnt, Typed a) => Term (Ptr (Array cnt a)) -> Term (Idx cnt) -> Term (Ptr a)Source

eval :: Typed a => Term a -> M (Term a)Source

eval_ :: Typed a => Term a -> M ()Source

lam_ :: (Typed a, Typed b) => (Term a -> Term b) -> Term (a -> b)Source

with_local :: Typed a => (V a -> M ()) -> Term aSource

vtof :: Typed a => V a -> StringSource

out :: Int -> [String] -> M ()Source

call :: Typed a => Decl a -> Term aSource

declare :: Typed a => Decl a -> M ()Source

inttag :: (INT a, Typed a, Count cnt) => Integer -> Term (Tag a cnt)Source

inttagt :: (INT a, Typed a, Count cnt) => a -> Integer -> Term (Tag a cnt)Source

defaulttag :: Tagged a cnt => Term (Tag a cnt)Source