Skip to content

Commit

Permalink
Fix the zonking of HsWrappers
Browse files Browse the repository at this point in the history
HsWrappers are horribly inconsistent at the moment. I intended that
  WpLam, WpApp     are for evidence abstraction/application
  WpTyLam, WpTyApp are for type abstraction/application

But when we zonk (WpApp co), where co is a coercion variable, we 
get a *coercion* not a coercion *variable*.   So for now I'm making
it into a WpTyApp, which the desugarer handles perfectly well.

(I'd forgotten to zonk it properly at all; that is the bug that 
this patch fixes.)
  • Loading branch information
simonpj@microsoft.com committed Sep 10, 2008
1 parent b7f052c commit a62561f
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions compiler/typecheck/TcHsSyn.lhs
Expand Up @@ -607,8 +607,15 @@ zonkCoFn env (WpLam id) = do { id' <- zonkDictBndr env id
; let env1 = extendZonkEnv1 env id'
; return (env1, WpLam id') }
zonkCoFn env (WpTyLam tv) = ASSERT( isImmutableTyVar tv )
do { return (env, WpTyLam tv) }
zonkCoFn env (WpApp id) = do { return (env, WpApp (zonkIdOcc env id)) }
return (env, WpTyLam tv)
zonkCoFn env (WpApp v)
| isTcTyVar v = do { co <- zonkTcTyVar v
; return (env, WpTyApp co) }
-- Yuk! A mutable coercion variable is a TcTyVar
-- not a CoVar, so don't use isCoVar!
-- Yuk! A WpApp can't hold the zonked type,
-- so we switch to WpTyApp
| otherwise = return (env, WpApp (zonkIdOcc env v))
zonkCoFn env (WpTyApp ty) = do { ty' <- zonkTcTypeToType env ty
; return (env, WpTyApp ty') }
zonkCoFn env (WpLet bs) = do { (env1, bs') <- zonkRecMonoBinds env bs
Expand Down

0 comments on commit a62561f

Please sign in to comment.