HaRe-0.6: tools/base/TC/TypeCheckTest.hs
-- $Id: TypeCheckTest.hs,v 1.10 2001/04/19 17:36:08 pasalic Exp $
module TypeCheckTest where
import TypeCheck
import TypeGenerics
import Syntax
import HsName
import HsLiteral
import InferenceMonad
tst e = do { f <- newGensym ;
t <- newVar starKind ;
(tr,cs) <- infer f [] env0 t e ;
return (visType tr, show cs)
}
e1 = hsLambda [hsPVar (UnQual "x")]
(hsLambda [hsPVar (UnQual "y")]
(hsApp (hsEVar (UnQual "y")) (hsEVar (UnQual "x"))))
e2 = hsLambda [hsPVar (UnQual "x")] $
hsApp (hsEVar (UnQual "x")) (hsLit (HsInt 4))
e3 = hsTuple [hsLit (HsInt 1), hsLit (HsInt 2)]
typeCheckDecls ds = runIM
(do { f <- newGensym ;
r <- inferDs f [] env0 ds ;
return $ show r
}) 0
--visSch (Sch ks ps t) = (map visKind ks,map (map visType) ps, visType t)
--visPred (IsIn x ts) = (x,map visType ts)
typeCheckDs ds = runIM
(do { f <- newGensym ;
(ngv, env, ps) <- inferDs f [] env0 ds ;
return (show env, show ps)
}) 0
showEnv (x,a) = (show x)++" :: "++(show a)++"\n"
colEnv (x,a) = do { a' <- collapse a; return(x,a') }
performTC ds =
perform (do { f <- newGensym
; (ngv, env, ps) <- inferDs f [] (env0 {termEnv = simpleEnv}) ds
; env' <- mapM colEnv (take (length (getTermEnv env) - length simpleEnv) (getTermEnv env))
; return (concat (map showEnv env') ++ show ps)
})