aboutsummaryrefslogtreecommitdiff
path: root/Sil/Types.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Types.dcl')
-rw-r--r--Sil/Types.dcl36
1 files changed, 36 insertions, 0 deletions
diff --git a/Sil/Types.dcl b/Sil/Types.dcl
new file mode 100644
index 0000000..1659436
--- /dev/null
+++ b/Sil/Types.dcl
@@ -0,0 +1,36 @@
+definition module Sil.Types
+
+from StdOverloaded import class ==, class toString
+
+from Data.Error import :: MaybeError
+from Data.Maybe import :: Maybe
+
+from Sil.Syntax import :: Expression, :: Function, :: Name, :: Op1, :: Op2
+
+:: Type
+ = TBool
+ | TInt
+ | TVoid
+ | (-->) infixr Type Type
+
+:: TypeError
+ = IllegalApplication Type Type
+
+instance == Type
+
+instance toString Type
+instance toString TypeError
+
+/**
+ * Size of an expression on the stack
+ */
+typeSize :: Type -> Int
+
+:: TypeResolver :== Name -> Maybe (MaybeError TypeError Type)
+
+class type a :: TypeResolver a -> Maybe (MaybeError TypeError Type)
+instance type Function
+instance type Expression
+instance type Name
+instance type Op1
+instance type Op2