on 267f708 help sign in
elk/src/Type/Fragment.hs
44 lines 922 B history raw
1{-# OPTIONS_GHC -Wall #-}
2module Type.Fragment where
4import qualified Data.List as List
5import qualified Data.Map as Map
7import Reporting.Annotation as A
8import Type.Type
11data Fragment = Fragment
12 { typeEnv :: Map.Map String (A.Located Type)
13 , vars :: [Variable]
14 , typeConstraint :: TypeConstraint
15 }
18emptyFragment :: Fragment
19emptyFragment =
20 Fragment Map.empty [] CTrue
23joinFragment :: Fragment -> Fragment -> Fragment
24joinFragment f1 f2 =
25 Fragment
26 { typeEnv =
27 Map.union (typeEnv f1) (typeEnv f2)
29 , vars =
30 vars f1 ++ vars f2
32 , typeConstraint =
33 typeConstraint f1 /\ typeConstraint f2
34 }
37joinFragments :: [Fragment] -> Fragment
38joinFragments =
39 List.foldl' (flip joinFragment) emptyFragment
42toScheme :: Fragment -> Scheme Type Variable
43toScheme fragment =
44 Scheme [] (vars fragment) (typeConstraint fragment) (typeEnv fragment)