2015-04-01 37 views
3

我正在做耶索德子網站和我在一些模板哈斯克爾生成的代碼得到一個錯誤類型:Yesod的TH生成不正確的代碼?

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

任何想法?

+0

如果您確信它是在耶索德一個bug,嘗試創建一個最小的例子,在[github上(https://github.com/yesodweb/yesod/issues)發佈的問題。 – Zeta 2015-04-01 11:06:17

回答

6

我認爲生成的代碼期望你有OverloadedStrings擴展在源文件中啓用。嘗試添加

{-# LANGUAGE OverloadedStrings #-} 

到源文件的頂部,你在模板Haskell代碼(即Data.hs)拼接。

+0

就是這樣。沒有想到那個,謝謝! – 2015-04-01 11:11:23

相關問題