@@ -33,10 +33,10 @@ test str =
33 Left err -> error $ "Parse error at " ++ show err
33 Left err -> error $ "Parse error at " ++ show err
34 Right expression -> do
34 Right expression -> do
35 env <- Env.initialEnvironment []
35 env <- Env.initialEnvironment []
36− var <- flexibleVar
36+ v <- var Flexible
37 let expr = SD.sortDefs expression
37 let expr = SD.sortDefs expression
38 print (pretty expr)
38 print (pretty expr)
39− constraint <- constrain env expr (VarN var)
39+ constraint <- constrain env expr (VarN v)
40 print =<< extraPretty constraint
40 print =<< extraPretty constraint
41 state <- execStateT (solve constraint) TS.initialState
41 state <- execStateT (solve constraint) TS.initialState
42 let errors = TS.sErrors state
42 let errors = TS.sErrors state
@@ -110,7 +110,7 @@ constrain env (L _ _ expr) tipe =
110 (ctipe, cs) <- Monad.foldM step (tipe,CTrue) (reverse pairs)
110 (ctipe, cs) <- Monad.foldM step (tipe,CTrue) (reverse pairs)
111 return (cs /\ name <? ctipe)
111 return (cs /\ name <? ctipe)
113− pair e = do v <- flexibleVar -- needs an ex
113+ pair e = do v <- var Flexible -- needs an ex
114 return (e, VarN v)
114 return (e, VarN v)
116 step (t,c) (e,x) = do
116 step (t,c) (e,x) = do
@@ -142,11 +142,11 @@ constrain env (L _ _ expr) tipe =
142 return (CAnd (cOld : cNew : constraints))
142 return (CAnd (cOld : cNew : constraints))
144 dummyField (label, _) = do
144 dummyField (label, _) = do
145− v <- flexibleVar -- needs an ex
145+ v <- var Flexible -- needs an ex
146 return (label, [VarN v])
146 return (label, [VarN v])
148 field (label, value) = do
148 field (label, value) = do
149− v <- flexibleVar -- needs an ex
149+ v <- var Flexible -- needs an ex
150 c <- ex [v] <$> constrain env value (VarN v)
150 c <- ex [v] <$> constrain env value (VarN v)
151 return ((label, [VarN v]), c)
151 return ((label, [VarN v]), c)
@@ -157,7 +157,7 @@ constrain env (L _ _ expr) tipe =
157 return $ ex (map snd pairs) (CAnd (tipe === recordType : cs))
157 return $ ex (map snd pairs) (CAnd (tipe === recordType : cs))
159 field (name, body) = do
159 field (name, body) = do
160− v <- flexibleVar -- needs an ex
160+ v <- var Flexible -- needs an ex
161 c <- constrain env body (VarN v)
161 c <- constrain env body (VarN v)
162 return ((name, v), c)
162 return ((name, v), c)
@@ -182,7 +182,7 @@ constrainDef env info (pattern, expr, maybeTipe) =
183 case (pattern, maybeTipe) of
183 case (pattern, maybeTipe) of
184 (PVar name, Just tipe) ->
184 (PVar name, Just tipe) ->
185− do flexiVars <- mapM (\_ -> flexibleVar) qs
185+ do flexiVars <- mapM (\_ -> var Flexible) qs
186 let inserts = zipWith (\arg typ -> Map.insert arg (VarN typ)) qs flexiVars
186 let inserts = zipWith (\arg typ -> Map.insert arg (VarN typ)) qs flexiVars
187 env' = env { Env.value = List.foldl' (\x f -> f x) (Env.value env) inserts }
187 env' = env { Env.value = List.foldl' (\x f -> f x) (Env.value env) inserts }
188 (vars, typ) <- Env.instantiateTypeWithContext env tipe Map.empty
188 (vars, typ) <- Env.instantiateTypeWithContext env tipe Map.empty
@@ -199,16 +199,16 @@ constrainDef env info (pattern, expr, maybeTipe) =
199 , fl rigidQuantifiers c /\ c1 )
199 , fl rigidQuantifiers c /\ c1 )
201 (PVar name, Nothing) ->
201 (PVar name, Nothing) ->
202− do var <- flexibleVar
202+ do v <- var Flexible
203− rigidVars <- mapM (\_ -> rigidVar) qs -- Some mistake may be happening here.
203+ rigidVars <- mapM (\_ -> var Rigid) qs -- Some mistake may be happening here.
204− -- Currently, qs is always the empty list.
204+ -- Currently, qs is always the empty list.
205− let tipe = VarN var
205+ let tipe = VarN v
206 inserts = zipWith (\arg typ -> Map.insert arg (VarN typ)) qs rigidVars
206 inserts = zipWith (\arg typ -> Map.insert arg (VarN typ)) qs rigidVars
207 env' = env { Env.value = List.foldl' (\x f -> f x) (Env.value env) inserts }
207 env' = env { Env.value = List.foldl' (\x f -> f x) (Env.value env) inserts }
208 c <- constrain env' expr tipe
208 c <- constrain env' expr tipe
209 return ( schemes
209 return ( schemes
210 , rigidVars ++ rigidQuantifiers
210 , rigidVars ++ rigidQuantifiers
211− , var : flexibleQuantifiers
211+ , v : flexibleQuantifiers
212 , Map.insert name tipe headers
212 , Map.insert name tipe headers
213 , c /\ c2
213 , c /\ c2