TTGing the lambda lifter

This commit is contained in:
sebastianselander 2023-02-10 12:09:08 +01:00
parent f4f1786be3
commit a1e9624d5e
5 changed files with 67 additions and 13 deletions

28
src/Abs.hs Normal file
View file

@ -0,0 +1,28 @@
{-# LANGUAGE TypeFamilies, PatternSynonyms, StandaloneDeriving #-}
module Abs where
import Data.String
data Program a = Program [Bind a]
data Bind a = Bind Ident [Ident] (Exp a)
newtype Ident = Ident String
deriving (Eq, Ord, Show, Data.String.IsString)
data Exp a = EId (IdFamily a) Ident
| EInt (IntFamily a) Integer
| EAdd (AddFamily a) (Exp a) (Exp a)
| EApp (AppFamily a) (Exp a) (Exp a)
| EAbs (AbsFamily a) Ident (Exp a)
| ELet (LetFamily a) [Bind a] (Exp a)
| EExp (ExpFamily a) (Exp a)
type family IdFamily a
type family IntFamily a
type family AddFamily a
type family AppFamily a
type family AbsFamily a
type family LetFamily a
type family ExpFamily a