Surface.hs (1077B)
1 module Surface where 2 import Data.ByteString (ByteString) 3 4 import Common 5 6 -------------------------------------------------------------------------------- 7 -- Types 8 9 newtype TypeName = TypeName ByteString deriving (Eq, Ord, Show) 10 11 data Type q 12 = TypeVar TypeName 13 | TypeAnnot (Type q) Kind 14 15 | TypeTArrow (Type q) (Type q) 16 | TypeTForall TypeName Kind (Type q) 17 18 | TypeQ q 19 | TypeQAdd (Type q) (Type q) 20 | TypeQMul (Type q) (Type q) 21 22 | TypeQTPair (Type q) (Type q) 23 | TypeQTFst (Type q) 24 | TypeQTSnd (Type q) 25 26 | TypeArrowAbs TypeName (Type q) 27 | TypeArrowApp (Type q) (Type q) 28 deriving Show 29 30 -------------------------------------------------------------------------------- 31 -- Terms 32 33 newtype TermName = TermName ByteString deriving (Eq, Ord, Show) 34 35 data Term q 36 = TermVar TermName 37 | TermAnnot (Term q) (Type q) 38 | TermLet TermName (Term q) (Type q) (Term q) 39 40 | TermArrowAbs TermName (Term q) 41 | TermArrowApp (Term q) (Term q) 42 43 | TermForallAbs TypeName (Term q) 44 | TermForallApp (Term q) (Type q) 45 deriving Show