How to get types including constraints out of TypecheckedModule

Simon Peyton Jones simonpj at
Fri Sep 25 07:42:29 UTC 2015

|  What if I have a binder:
|      (foo, bar) = (show, show)
|  I can now get the polymorphic types of foo and bar respectively but
|  how do I'm not sure how I'm meant to zip up the monomorphic type of
|  `pat_rhs_ty`, i.e. the type of the whole rhs, with the polymorphic
|  types in `abs_exports`.
|  I mean I could just match up the type variables and pull the
|  constraints in by hand but it just seems like there already ought to
|  be a way to do this somewhere?

I'm sorry I don't understand the question.  For the above pattern binding you'll get something like

   AbsBinds {
      abe_tvs = [a,b]
      abe_ev_vars = [ d1 :: Show a, d2 :: Show b ]
      abe_exports = [
        ABE { abe_poly = foo :: forall a. Show a => a->String
            , abe_mono = foo_m :: a->String
            , abe_wrap = ... }
        ABE { abe_poly :: bar :: forall b. Show b => b->String
              abe_mono = bar_m :: b->String 
              ... }
     abe_binds = { (foo_m, bar_m) = (show a d1, show b d2) }

|  Alternatively my strategy to do this would be to build a map from
|  TyVar to the constraint and then going over the monomorphic types and
|  for each TyVar that's mentioned in the monomorphic type pull in the
|  relevant constraint and apply those to the monomorphic type. Does that
|  sound sensible at all? I have no idea how equality constraints and all
|  that fancy stuff are encoded so I hope that doesn't need any special
|  handling ;)
|  > I hope this is of some help.  If so, would you like to update the
|  > Commentary (on the GHC wiki) to add the information you wish had
|  been
|  > there in the first place?  Thanks!
|  Very much so, thanks :)
|  I'd love to put this in the commentary somewhere but looking at
| I can't actually find
|  anywhere this would fit in and it just seems like an awefully specific
|  thing to put there. Maybe it would be better to improve the comments
|  instead for the next person that goes looking thoguth the source
|  trying to figure out where the types end up.
|  For example the comment on AbsBinds could mention that this is where
|  the typechecker stores inferred constrainst or something like that.
|  --Daniel

More information about the ghc-devs mailing list