Equality check for types that respects type families? (#9582)
Andreas Abel
abela at chalmers.se
Thu Sep 18 08:17:15 UTC 2014
Thanks, Simon, for the quick answer (see ticket #9582). --Andreas
On 17.09.2014 23:58, Andreas Abel wrote:
> Looking at bug #9582
>
> Associated Type Synonyms do not unfold in InstanceSigs
> https://ghc.haskell.org/trac/ghc/ticket/9582
>
> 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
> families.
>
> https://github.com/ghc/ghc/blob/master/compiler/typecheck/TcInstDcls.lhs
>
> -- 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)
> ...
>
> https://github.com/ghc/ghc/blob/master/compiler/types/Type.lhs
>
> 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).
>
> Cheers,
> 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
http://www2.tcs.ifi.lmu.de/~abel/
More information about the ghc-devs
mailing list