@@ -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