Yesod 的 TH 生成不正确的代码?
Yesod's TH generates incorrect code?
我正在制作 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
问题很明显,但我不明白为什么会生成错误代码。
此 TH 调用中出现问题:
mkYesodSubData "DataSource" [parseRoutes|
/ SubHomeR GET
/datasource DataSourceInputR POST GET
|]
具体是由以下行引起的:
/datasource DataSourceInputR POST GET
删除此行可以解决问题。
我正在使用 Stackage LTS 1.15:
remote-repo: stackage-lts-1.15:http://www.stackage.org/snapshot/lts-1.15
我在阴谋集团的沙箱里。
相关文件如下:https://gist.github.com/BeerendLauwers/774cc432c3ada5b597e1
有什么想法吗?
我认为生成的代码需要您在源文件中启用 OverloadedStrings
扩展。尝试添加
{-# LANGUAGE OverloadedStrings #-}
到源文件的顶部,您在其中拼接模板 Haskell 代码(即 Data.hs
)。
我正在制作 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
问题很明显,但我不明白为什么会生成错误代码。
此 TH 调用中出现问题:
mkYesodSubData "DataSource" [parseRoutes|
/ SubHomeR GET
/datasource DataSourceInputR POST GET
|]
具体是由以下行引起的:
/datasource DataSourceInputR POST GET
删除此行可以解决问题。
我正在使用 Stackage LTS 1.15:
remote-repo: stackage-lts-1.15:http://www.stackage.org/snapshot/lts-1.15
我在阴谋集团的沙箱里。
相关文件如下:https://gist.github.com/BeerendLauwers/774cc432c3ada5b597e1
有什么想法吗?
我认为生成的代码需要您在源文件中启用 OverloadedStrings
扩展。尝试添加
{-# LANGUAGE OverloadedStrings #-}
到源文件的顶部,您在其中拼接模板 Haskell 代码(即 Data.hs
)。