Equality check for types that respects type families? (#9582)

Andreas Abel abela at chalmers.se
Wed Sep 17 21:58:17 UTC 2014

Looking at bug #9582

   Associated Type Synonyms do not unfold in InstanceSigs

I found that the given type in an instance signature is compared to the 
expected type using Type.eqType, which does not seem to know about type 


     -- Check that any type signatures have exactly the right type
     check_inst_sig hs_ty@(L loc _)
        = setSrcSpan loc $
          do { sig_ty <- tcHsSigType (FunSigCtxt sel_name) hs_ty
             ; inst_sigs <- xoptM Opt_InstanceSigs
             ; if inst_sigs then
                 unless (sig_ty `eqType` local_meth_ty)
                        (badInstSigErr sel_name local_meth_ty)


eqType :: Type -> Type -> Bool
-- ^ Type equality on source types. Does not look through @newtypes@ or
-- 'PredType's, but it does look through type synonyms.
-- Watch out for horrible hack: See Note [Comparison with OpenTypeKind]

Question:  Is there a (monadic) function for checking type equality 
which knows about the current type family rules in scope and honors them?
Maybe the better question is where to find it, since there should be 
such a beast (used in the type checker somewhere to compare expected 
with inferred types).

Andreas (new to the GHC source code)

Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se

More information about the ghc-devs mailing list