Yesod的TH生成错误的代码?

Bee*_*ers 3 haskell yesod template-haskell

我正在创建一个Yesod子网站,并在一些模板Haskell生成的代码中出现类型错误:

Yesod\DataSource\Data.hs:19:1:
Couldn't match type `[Char]' with `Text'
Expected type: () -> ([Text], [(Text, Text)]) -> Maybe (Route DataSource)
  Actual type: () -> ([[Char]], [(Text, Text)]) -> Maybe (Route DataSource)
In the first argument of `\ f_amMs x_amMt -> f_amMs () x_amMt ::
                            forall a_amMu.
                            (() -> ([Text], [(Text, Text)]) -> Maybe (Route a_amMu))
                            -> ([Text], [(Text, Text)]) -> Maybe (Route a_amMu)', namely
  `helper_amMr'
In the expression:
    \ f_amMs x_amMt -> f_amMs () x_amMt ::
      forall a_amMu.
      (() -> ([Text], [(Text, Text)]) -> Maybe (Route a_amMu))
      -> ([Text], [(Text, Text)]) -> Maybe (Route a_amMu)
    helper_amMr
Run Code Online (Sandbox Code Playgroud)

问题很明显,但我不明白为什么它会生成错误的代码.

问题出现在这个TH调用中:

mkYesodSubData "DataSource" [parseRoutes|
/ SubHomeR GET
/datasource DataSourceInputR POST GET
|]
Run Code Online (Sandbox Code Playgroud)

具体来说,它是由线路引起的:

/datasource DataSourceInputR POST GET
Run Code Online (Sandbox Code Playgroud)

删除此行可修复此问题.

我正在使用Stackage LTS 1.15:

remote-repo: stackage-lts-1.15:http://www.stackage.org/snapshot/lts-1.15
Run Code Online (Sandbox Code Playgroud)

我在一个cabal沙箱里面.

以下是相关文件:https://gist.github.com/BeerendLauwers/774cc432c3ada5b597e1

任何的想法?

sha*_*ang 6

我认为生成的代码需要您OverloadedStrings在源文件中启用扩展.尝试添加

{-# LANGUAGE OverloadedStrings #-}
Run Code Online (Sandbox Code Playgroud)

到您在模板Haskell代码(即Data.hs)中拼接的源文件的顶部.