on master help sign in
Get variable reordering working for Declarations.
2b9853cEvan Czaplicki
compiler/Type/Constrain/Declaration.hs+5−2
@@ -24,6 +24,7 @@ import Parse.Parser (parseProgram)
24import Type.Solve (solve)
24import Type.Solve (solve)
25import qualified Type.State as TS
25import qualified Type.State as TS
26import Control.Monad.State
26import Control.Monad.State
27+import Transform.SortDefinitions as Sort
27
28
28test filePath = do
29test filePath = do
29 src <- readFile filePath
30 src <- readFile filePath
@@ -32,7 +33,9 @@ test filePath = do
32 Right (Module _ _ _ decls) -> do
33 Right (Module _ _ _ decls) -> do
33 env <- Env.initialEnvironment
34 env <- Env.initialEnvironment
34 var <- T.flexibleVar
35 var <- T.flexibleVar
36+ let expr = sortDefs (toExpr decls)
37+ print $ pretty expr
35− constraint <- TcExpr.constrain env (toExpr decls) (T.VarN var)
38+ constraint <- TcExpr.constrain env expr (T.VarN var)
36 print =<< T.extraPretty constraint
39 print =<< T.extraPretty constraint
37 (env,_,_,errors) <- execStateT (solve constraint) TS.initialState
40 (env,_,_,errors) <- execStateT (solve constraint) TS.initialState
38 forM (Map.toList env) $ \(n,t) -> do
41 forM (Map.toList env) $ \(n,t) -> do
@@ -43,7 +46,7 @@ test filePath = do
43 mapM_ print =<< sequence errors
46 mapM_ print =<< sequence errors
44
47
45toExpr decls =
48toExpr decls =
46− SL.none $ SE.Let (concatMap toDefs decls) (SL.none $ SE.Literal (SL.IntNum 0))
49+ SL.none $ SE.Let (concatMap toDefs decls) (SL.none $ SE.Literal (SL.IntNum 42))
47
50
48toDefs :: Declaration t v -> [SE.Def t v]
51toDefs :: Declaration t v -> [SE.Def t v]
49toDefs decl =
52toDefs decl =
tests/good/Soundness.elmnew file+9
@@ -0,0 +1,9 @@
1+
2+trickyID x = let y = x in y
3+
4+quad f = twice (twice f)
5+twice f x = f (f x)
6+
7+n = quad (quad trickyID) 4
8+c = twice trickyID 'a'
9+