Commit 65f44e38 authored by simonpj's avatar simonpj
Browse files

[project @ 2002-03-12 09:13:08 by simonpj]

	Fix mkSynTy

Fix a nasty and long-lived bug in mkSynTy which meant that in:

	newtype A a = A a
	type B = A
	f :: B Double

the type (B Double) wasn't regarded properly as (A Double).  This bug
has lasted for a long time because the type inference engine is fairly
forgiving about missing the invariant that a TyConApp always looks
like one right at the top level.  In fact, it's so forgiving that I
don't know how to tickle this bug into showing up.  (It showed up in
5.02, becuase the context-simplification for 'deriving' is done by a
different engine as all the other context simplification.)

Still, the invariant should hold, and this fix makes it so.
parent 49c84dec
...@@ -358,7 +358,10 @@ mkSynTy tycon tys ...@@ -358,7 +358,10 @@ mkSynTy tycon tys
| n_args == arity -- Exactly saturated | n_args == arity -- Exactly saturated
= mk_syn tys = mk_syn tys
| n_args > arity -- Over-saturated | n_args > arity -- Over-saturated
= case splitAt arity tys of { (as,bs) -> foldl AppTy (mk_syn as) bs } = case splitAt arity tys of { (as,bs) -> mkAppTys (mk_syn as) bs }
-- Its important to use mkAppTys, rather than (foldl AppTy),
-- because (mk_syn as) might well return a partially-applied
-- type constructor; indeed, usually will!
| otherwise -- Un-saturated | otherwise -- Un-saturated
= TyConApp tycon tys = TyConApp tycon tys
-- For the un-saturated case we build TyConApp directly -- For the un-saturated case we build TyConApp directly
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment