on 2a930fd help sign in
elk/src/Type/Fragment.hs
27 lines 749 B history raw
1module Type.Fragment where
3import qualified Data.List as List
4import qualified Data.Map as Map
6import Type.Type
7import AST.Pattern
8import AST.Annotation (noneNoDocs)
10data Fragment = Fragment
11 { typeEnv :: Map.Map String Type
12 , vars :: [Variable]
13 , typeConstraint :: TypeConstraint
14 } deriving Show
16emptyFragment = Fragment Map.empty [] (noneNoDocs CTrue)
18joinFragment f1 f2 = Fragment
19 { typeEnv = Map.union (typeEnv f1) (typeEnv f2)
20 , vars = vars f1 ++ vars f2
21 , typeConstraint = typeConstraint f1 /\ typeConstraint f2
22 }
24joinFragments = List.foldl' (flip joinFragment) emptyFragment
26toScheme fragment =
27 Scheme [] (vars fragment) (typeConstraint fragment) (typeEnv fragment)