summary refs log tree commit diff
path: root/haskell/app/Types.hs
diff options
context:
space:
mode:
Diffstat (limited to 'haskell/app/Types.hs')
-rw-r--r--haskell/app/Types.hs64
1 files changed, 64 insertions, 0 deletions
diff --git a/haskell/app/Types.hs b/haskell/app/Types.hs
new file mode 100644
index 0000000..8c4790f
--- /dev/null
+++ b/haskell/app/Types.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+
+module Types where
+
+import Data.Functor.Foldable.TH
+import GHC.Generics
+
+data AExp
+    = LitTrue
+    | LitFalse
+    | Ident String
+    | Number Integer
+    | LitStr String
+    | AAdd AExp AExp
+    | ASub AExp AExp
+    | AMul AExp AExp
+    | ADiv AExp AExp
+    | AGt AExp AExp
+    | ALt AExp AExp
+    | AEq AExp AExp
+    | ABsl AExp AExp
+    | ABsr AExp AExp
+    | AAnd AExp AExp
+    | AOr AExp AExp
+    | AXor AExp AExp
+    | Lam [String] CExp
+    deriving (Show, Read, Generic)
+
+data GlobalAExp
+    = GlobalLitTrue
+    | GlobalLitFalse
+    | GlobalIdent String
+    | GlobalNumber Integer
+    | GlobalLitStr String
+    | GlobalAAdd GlobalAExp GlobalAExp
+    | GlobalASub GlobalAExp GlobalAExp
+    | GlobalAMul GlobalAExp GlobalAExp
+    | GlobalADiv GlobalAExp GlobalAExp
+    | GlobalAGt GlobalAExp GlobalAExp
+    | GlobalALt GlobalAExp GlobalAExp
+    | GlobalAEq GlobalAExp GlobalAExp
+    | GlobalABsl GlobalAExp GlobalAExp
+    | GlobalABsr GlobalAExp GlobalAExp
+    | GlobalAAnd GlobalAExp GlobalAExp
+    | GlobalAOr GlobalAExp GlobalAExp
+    | GlobalAXor GlobalAExp GlobalAExp
+    | Funcref String
+    deriving (Show, Read, Generic)
+data Funcall
+    = Call String [AExp]
+    | Atom AExp
+    deriving (Show, Read, Generic)
+
+data CExp
+    = Let String Funcall CExp
+    | If AExp CExp CExp
+    | FC Funcall
+    deriving (Show, Read, Generic)
+
+makeBaseFunctor ''CExp
+makeBaseFunctor ''AExp
+makeBaseFunctor ''GlobalAExp
+makeBaseFunctor ''Funcall