on 727d708 help sign in
elk/compiler/Type/Fragment.hs
27 lines 684 B history raw
1module Type.Fragment where
3import qualified Data.List as List
4import qualified Data.Map as Map
6import Type.Type
7import SourceSyntax.Pattern
9data Fragment = Fragment {
10 typeEnv :: Map.Map String Type,
11 vars :: [Variable],
12 typeConstraint :: TypeConstraint
13} deriving Show
15emptyFragment = Fragment Map.empty [] CTrue
17joinFragment f1 f2 = Fragment {
18 typeEnv = Map.union (typeEnv f1) (typeEnv f2),
19 vars = vars f1 ++ vars f2,
20 typeConstraint = typeConstraint f1 /\ typeConstraint f2
23joinFragments = List.foldl' (flip joinFragment) emptyFragment
26toScheme fragment =
27 Scheme [] (vars fragment) (typeConstraint fragment) (typeEnv fragment)