Opened 6 years ago
Closed 5 years ago
#6062 closed bug (fixed)
TH treats non-functions in function position inconsistently
Reported by: | heisenbug | Owned by: | simonpj |
---|---|---|---|
Priority: | normal | Milestone: | 7.8.1 |
Component: | Compiler | Version: | 7.5 |
Keywords: | Cc: | ||
Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
Type of failure: | None/Unknown | Test Case: | th/T6062 |
Blocked By: | Blocking: | ||
Related Tickets: | Differential Rev(s): | ||
Wiki Page: |
Description
I start GHCi like this:
~/bin/ghci -XTemplateHaskell
My aim is to use TH to rewrite certain application-looking (syntactically) constructs to semantically valid haskell code, that passes the type-checker (c.f. Conor McBride's "idiom brackets").
But I already fail at very simple things, because GHC seems to type-check the TH quotation's innards...
This works:
Prelude> :t [| id id |] [| id id |] :: Language.Haskell.TH.Syntax.Q Language.Haskell.TH.Syntax.Exp
This is also accepted, though it is clearly not typeable:
Prelude> :t [| 1 1 |] [| 1 1 |] :: Language.Haskell.TH.Syntax.Q Language.Haskell.TH.Syntax.Exp
Encouraged by this I try:
Prelude> :t [| False True |] <interactive>:1:4: Couldn't match expected type `Bool -> t0' with actual type `Bool' The function `False' is applied to one argument, but its type `Bool' has none In the Template Haskell quotation [| False True |] In the expression: [| False True |]
Bummer! Somehow the type-checker does get into business with "expressions" inside quotations.
I believe this is a bug, and a quotation should be built for [| False True |]
in spite of False True
not being typeable.
I know that using quasi-quotations I can build my own parser and rewrite engine around this, but that is a tad heavyweight for me and I'd like to understand the root of the above inconsistency and why the type checker gets active in some cases above, but not in others.
Change History (4)
comment:1 Changed 6 years ago by
difficulty: | → Unknown |
---|
comment:2 Changed 6 years ago by
Milestone: | → 7.8.1 |
---|---|
Owner: | set to simonpj |
comment:4 Changed 5 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Test Case: | → th/T6062 |
This is now fixed thanks to new TH. Woo hoo!
Read: http://hackage.haskell.org/trac/ghc/blog/Template%20Haskell%20Proposal which tackles precisely the question you raise.
I guess you are another customer for this work, which is (still) pending.
Simon