module TIProg where
import Subst
import Assump
import TIMonad
import Infer
import TIMain
import Pred
type Program = [BindGroup]
tiProgram :: ClassEnv -> [Assump] -> Program -> [Assump]
tiProgram ce as bgs = runTI $
do (ps, as') <- tiSeq tiBindGroup ce as bgs
s <- getSubst
let rs = reduce ce (apply s ps)
s' <- defaultSubst ce [] rs
return (apply (s'@@s) as')
tiBindGroup' ce as bs = do (ps,as') <- tiBindGroup ce as bs
trim (tv (as'++as))
return (ps,as')
tiProgram' :: ClassEnv -> [Assump] -> Program -> [Assump]
tiProgram' ce as bgs = runTI $
do (ps, as') <- tiSeq tiBindGroup' ce as bgs
s <- getSubst
let rs = reduce ce (apply s ps)
s' <- defaultSubst ce [] rs
return (apply (s'@@s) as')