Getting the inferred types of TH's UnboundVarEs
sandy at sandymaguire.me
Wed Mar 18 18:54:00 UTC 2020
I mean if `insert :: a -> Container a -> Container a`, and I call it with
`[e| insert 5 True |]`, the quote will fail.
The goal here is to generate `Fn f` patterns in the property lambda
whenever the `UnboundVarE` is a function. For example, today if I am given
[e| law "length/map" (length as == length (map f as)) |]
the generated code will be
property $ \as f -> length as === length (map f as)
when I would prefer to generate
property $ \as (Fn f) -> length as === length (map f as)
which will have significantly better UX. I'm willing to write a bad
typechecker for `Exp`s, but really hoping I won't have to.
On Wed, Mar 18, 2020 at 1:04 AM Matthew Pickering <
matthewtpickering at gmail.com> wrote:
> Good morning Sandy, thanks for your email.
> I don't think that GHC will typecheck the quote until you splice it
> in. What exactly do you mean that it fails if `b` is replaced with
> something different?
> What are you hoping to do with this information?
> This reminds me a bit of the `qTypecheck` action I have implemented on
> another branch -
> On Wed, Mar 18, 2020 at 1:56 AM Sandy Maguire <sandy at sandymaguire.me>
> > Hi all,
> > I'm writing some TH code that should generate property tests. For
> example, the expression:
> > $(generate [e| law "idempotent" (insert a (insert a b) == insert a b) |])
> > should generate the code
> > property $ \a b -> insert a (insert a b) === insert a b
> > I do this by looking for UnboundVarEs in the Exp returned by the [e|
> quote, and binding them in a lambda. All of this works.
> > However, now I'm trying to get the inferred types of `a` and `b` in the
> above. GHC clearly is typechecking the quote, since it will fail if I
> replace `b` with something nonsensical. Is there some existent way to get
> the inferred type of an UnboundVarE --- ideally without reimplementing the
> > Thanks!
> > Sandy
> > _______________________________________________
> > ghc-devs mailing list
> > ghc-devs at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the ghc-devs