in the type checker monad we should use lazy pattern matching because otherwise we force the exhaustive tree generation to be strict

This commit is contained in:
krasimir
2010-10-19 13:04:41 +00:00
parent e12d96451d
commit 5acec7be21

View File

@@ -133,10 +133,10 @@ instance Functor (TcM s) where
runTcM :: Abstr -> TcM s a -> s -> MetaStore s -> ([(s,TcError)],[(s,MetaStore s,a)])
runTcM abs f s ms = collect (unTcM f abs s ms) ([],[])
where
collect (Ok _ ms x) (es,xs) = (es,(s,ms,x) : xs)
collect (Fail s e) (es,xs) = ((s,e) : es,xs)
collect (Zero) exs = exs
collect (Plus b1 b2) exs = collect b1 (collect b2 exs)
collect (Ok _ ms x) ~(es,xs) = (es,(s,ms,x) : xs)
collect (Fail s e) ~(es,xs) = ((s,e) : es,xs)
collect (Zero) exs = exs
collect (Plus b1 b2) exs = collect b1 (collect b2 exs)
lookupCatHyps :: CId -> TcM s [Hypo]
lookupCatHyps cat = TcM (\abstr s ms -> case Map.lookup cat (cats abstr) of