From bc950badd0655328af7a9886988722809e367d07 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Thu, 20 Jul 2017 20:25:25 +0000 Subject: Type checking --- Sil/Types.dcl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Sil/Types.dcl (limited to 'Sil/Types.dcl') 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 -- cgit v1.2.3