@@ -1,3 +1,4 @@
1+{-# OPTIONS_GHC -Wall #-}
12module Type.Fragment where
23
34import qualified Data.List as List
@@ -12,15 +13,31 @@ data Fragment = Fragment
1213 , typeConstraint :: TypeConstraint
1314 }
1415
15−emptyFragment = Fragment Map.empty [] (noneNoDocs CTrue)
1616
17−joinFragment f1 f2 = Fragment
18− { typeEnv = Map.union (typeEnv f1) (typeEnv f2)
19− , vars = vars f1 ++ vars f2
20− , typeConstraint = typeConstraint f1 /\ typeConstraint f2
17+emptyFragment :: Fragment
18+emptyFragment =
19+ Fragment Map.empty [] (noneNoDocs CTrue)
20+
21+
22+joinFragment :: Fragment -> Fragment -> Fragment
23+joinFragment f1 f2 =
24+ Fragment
25+ { typeEnv =
26+ Map.union (typeEnv f1) (typeEnv f2)
27+
28+ , vars =
29+ vars f1 ++ vars f2
30+
31+ , typeConstraint =
32+ typeConstraint f1 /\ typeConstraint f2
2133 }
2234
23−joinFragments = List.foldl' (flip joinFragment) emptyFragment
2435
36+joinFragments :: [Fragment] -> Fragment
37+joinFragments =
38+ List.foldl' (flip joinFragment) emptyFragment
39+
40+
41+toScheme :: Fragment -> Scheme Type Variable
2542toScheme fragment =
2643 Scheme [] (vars fragment) (typeConstraint fragment) (typeEnv fragment)