
| 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) } } Simon | | 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 | https://ghc.haskell.org/trac/ghc/wiki/Commentary 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