elm/compiler/Type/Fragment.hs
2013-07-23 14:59:53 +02:00

27 lines
No EOL
684 B
Haskell

module Type.Fragment where
import qualified Data.List as List
import qualified Data.Map as Map
import Type.Type
import SourceSyntax.Pattern
data Fragment = Fragment {
typeEnv :: Map.Map String Type,
vars :: [Variable],
typeConstraint :: TypeConstraint
} deriving Show
emptyFragment = Fragment Map.empty [] CTrue
joinFragment f1 f2 = Fragment {
typeEnv = Map.union (typeEnv f1) (typeEnv f2),
vars = vars f1 ++ vars f2,
typeConstraint = typeConstraint f1 /\ typeConstraint f2
}
joinFragments = List.foldl' (flip joinFragment) emptyFragment
toScheme fragment =
Scheme [] (vars fragment) (typeConstraint fragment) (typeEnv fragment)