Get variable reordering working for Declarations.

This commit is contained in:
Evan Czaplicki 2013-07-13 13:44:40 +02:00
parent fe23c0e66d
commit 2b9853ce9b
2 changed files with 14 additions and 2 deletions

View file

@ -24,6 +24,7 @@ import Parse.Parser (parseProgram)
import Type.Solve (solve)
import qualified Type.State as TS
import Control.Monad.State
import Transform.SortDefinitions as Sort
test filePath = do
src <- readFile filePath
@ -32,7 +33,9 @@ test filePath = do
Right (Module _ _ _ decls) -> do
env <- Env.initialEnvironment
var <- T.flexibleVar
constraint <- TcExpr.constrain env (toExpr decls) (T.VarN var)
let expr = sortDefs (toExpr decls)
print $ pretty expr
constraint <- TcExpr.constrain env expr (T.VarN var)
print =<< T.extraPretty constraint
(env,_,_,errors) <- execStateT (solve constraint) TS.initialState
forM (Map.toList env) $ \(n,t) -> do
@ -43,7 +46,7 @@ test filePath = do
mapM_ print =<< sequence errors
toExpr decls =
SL.none $ SE.Let (concatMap toDefs decls) (SL.none $ SE.Literal (SL.IntNum 0))
SL.none $ SE.Let (concatMap toDefs decls) (SL.none $ SE.Literal (SL.IntNum 42))
toDefs :: Declaration t v -> [SE.Def t v]
toDefs decl =

9
tests/good/Soundness.elm Normal file
View file

@ -0,0 +1,9 @@
trickyID x = let y = x in y
quad f = twice (twice f)
twice f x = f (f x)
n = quad (quad trickyID) 4
c = twice trickyID 'a'