@@ -6,6 +6,7 @@ import qualified Control.Monad.State as State
6import qualified Data.Traversable as Traverse
6import qualified Data.Traversable as Traverse
7import qualified Data.Map as Map
7import qualified Data.Map as Map
8import Data.Map ((!))
8import Data.Map ((!))
9+import Data.List (isPrefixOf)
9import qualified Data.UnionFind.IO as UF
10import qualified Data.UnionFind.IO as UF
11import qualified SourceSyntax.Type as Src
12import qualified SourceSyntax.Type as Src
@@ -126,10 +127,15 @@ instantiateTypeWithContext env sourceType dict =
126 dict <- State.get
127 dict <- State.get
127 case Map.lookup x dict of
128 case Map.lookup x dict of
128 Just var -> return (VarN var)
129 Just var -> return (VarN var)
129− Nothing -> do
130+ Nothing ->
130− var <- State.liftIO $ namedVar Flexible x -- should this be Constant or Flexible?
131+ do var <- State.liftIO $ namedVar flex x
131− State.put (Map.insert x var dict)
132+ State.put (Map.insert x var dict)
132− return (VarN var)
133+ return (VarN var)
135+ flex | "number" `isPrefixOf` x = IsIn Number
136+ | "comparable" `isPrefixOf` x = IsIn Comparable
137+ | "appendable" `isPrefixOf` x = IsIn Appendable
138+ | otherwise = Flexible
134 Src.Data name ts -> do
140 Src.Data name ts -> do
135 ts' <- mapM go ts
141 ts' <- mapM go ts