Hi Yotam, Template Haskell expression quotes must start with either `[|` or `[e|`, but instead these start with `[e |` - note the space. They are list comprehensions which filter to just the elements of `es` that match the `(dL -> L _ (Present _ e))`. Also, the `dL -> ...` portion is a view pattern that is equivalent to `id`, since since the arguments are already wrapped in `L`.
For something like `runQ [| Foo b <- Foo 1 |]` to work, there'd need to be a quotation for `Stmt`, but there are only quotations for `Exp` / `[Dec]` / `Type` / `Pat`. I hope that's helpful! -Michael On Sat, Dec 8, 2018 at 3:30 AM Yotam Ohad <[email protected]> wrote: > > Hi, > In the function DsMeta.repE there is a format being repeated: > For example in: > > repE e@(ExplicitTuple _ es boxed) > | not (all tupArgPresent es) = notHandled "Tuple sections" (ppr e) > | isBoxed boxed = do { xs <- repLEs [e | (dL->L _ (Present _ e)) <- es] > ; repTup xs } > | otherwise = do { xs <- repLEs [e | (dL->L _ (Present _ e)) <- es] > ; repUnboxedTup xs } > > There is `(dL->L _ (Present _ e)) <- es`. I don't understand how this type > checks correctly. > If I'll try to do > > data Foo a = Foo a > runQ [| Foo b <- Foo 1 |] > > in ghciI get an error. What is the difference? > > Yotam > _______________________________________________ > ghc-devs mailing list > [email protected] > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs _______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
