on master help sign in
Properly handle constrained variables when converting from Src.Type to Type.Type
commit642b1f7fccb3770f7ddbf675e82ec68400293405 authorEvan Czaplicki <info@elm-lang.org> dateThu 25 Jul 2013, 17:36 (13 years ago) parent609cc3d
1 file changed+10−4
compiler/Type/Environment.hs+10−4
compiler/Type/Environment.hs+10−4
@@ -6,6 +6,7 @@ import qualified Control.Monad.State as State
66import qualified Data.Traversable as Traverse
77import qualified Data.Map as Map
88import Data.Map ((!))
9+import Data.List (isPrefixOf)
910import qualified Data.UnionFind.IO as UF
1011
1112import qualified SourceSyntax.Type as Src
@@ -126,10 +127,15 @@ instantiateTypeWithContext env sourceType dict =
126127 dict <- State.get
127128 case Map.lookup x dict of
128129 Just var -> return (VarN var)
129− Nothing -> do
130− var <- State.liftIO $ namedVar Flexible x -- should this be Constant or Flexible?
131− State.put (Map.insert x var dict)
132− return (VarN var)
130+ Nothing ->
131+ do var <- State.liftIO $ namedVar flex x
132+ State.put (Map.insert x var dict)
133+ return (VarN var)
134+ where
135+ flex | "number" `isPrefixOf` x = IsIn Number
136+ | "comparable" `isPrefixOf` x = IsIn Comparable
137+ | "appendable" `isPrefixOf` x = IsIn Appendable
138+ | otherwise = Flexible
133139
134140 Src.Data name ts -> do
135141 ts' <- mapM go ts