Ticket #6062 (new bug)

Opened 13 months ago

Last modified 8 months ago

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 Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

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

Changed 13 months ago by simonpj

  • difficulty set to Unknown

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

Changed 8 months ago by igloo

  • owner set to simonpj
  • milestone set to 7.8.1
Note: See TracTickets for help on using tickets.