on 501c607 help sign in
elk/src/Type/Fragment.hs
43 lines 927 B history raw
1{-# OPTIONS_GHC -Wall #-}
2module Type.Fragment where
4import qualified Data.List as List
5import qualified Data.Map as Map
7import Type.Type
8import AST.Annotation (noneNoDocs)
10data Fragment = Fragment
11 { typeEnv :: Map.Map String Type
12 , vars :: [Variable]
13 , typeConstraint :: TypeConstraint
14 }
17emptyFragment :: Fragment
18emptyFragment =
19 Fragment Map.empty [] (noneNoDocs CTrue)
22joinFragment :: Fragment -> Fragment -> Fragment
23joinFragment f1 f2 =
24 Fragment
25 { typeEnv =
26 Map.union (typeEnv f1) (typeEnv f2)
28 , vars =
29 vars f1 ++ vars f2
31 , typeConstraint =
32 typeConstraint f1 /\ typeConstraint f2
33 }
36joinFragments :: [Fragment] -> Fragment
37joinFragments =
38 List.foldl' (flip joinFragment) emptyFragment
41toScheme :: Fragment -> Scheme Type Variable
42toScheme fragment =
43 Scheme [] (vars fragment) (typeConstraint fragment) (typeEnv fragment)