【问题标题】:Template Haskell error when using "deriving"使用“派生”时的模板 Haskell 错误
【发布时间】:2013-04-03 16:33:16
【问题描述】:

对我得到的结果有点困惑。使用以下内容:

GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :m + Language.Haskell.TH

我得到了这个成功的结果:

Prelude Language.Haskell.TH> runQ [d| data X = X |]
[DataD [] X_0 [] [NormalC X_1 []] []]

但我收到此错误:

Prelude Language.Haskell.TH> runQ [d| data X = X deriving Show |]

<interactive>:4:30:
    The exact Name `X' is not in scope
      Probable cause: you used a unique name (NameU) in Template Haskell but did not bind it
    In the Template Haskell quotation [d| data X = X deriving (Show) |]
    In the first argument of `runQ', namely
      `[d| data X = X deriving (Show) |]'
    In the expression: runQ [d| data X = X deriving (Show) |]

使用 Template Haskell 时无法派生 Show?

【问题讨论】:

    标签: haskell template-haskell


    【解决方案1】:

    看起来这是一个 bug in GHC,在 7.6.1 版本中是 fixed

    $ ~/bin/ghc-7.6.1/bin/ghci
    GHCi, version 7.6.1: http://www.haskell.org/ghc/  :? for help
    [...]
    Prelude> :set -XTemplateHaskell
    Prelude> import Language.Haskell.TH
    Prelude Language.Haskell.TH> runQ [d| data X = X deriving (Show) |]
    [...]
    [DataD [] X_0 [] [NormalC X_1 []] [GHC.Show.Show]]
    

    【讨论】:

    • 我使用的是 Haskell 平台 2012.4。猜猜我要么需要手动更新 GHC,要么等待下一个大版本...
    • 下一个大版本 (2013.2) is expected in the first half of May.
    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多