2015-04-01 2 views
3

Делаю подузел Есод и я получаю ошибку типа в какой-то шаблон Haskell-сгенерированного кода:Yesod's 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

Если вы уверены, что это ошибка в Yesod, попробуйте создать минимальный пример и опубликуйте проблему на [github] (https://github.com/yesodweb/yesod/issues). – Zeta

ответ

6

Я думаю, что сгенерированный код ожидает, что у вас есть расширение OverloadedStrings в вашем исходном файле. Попробуйте добавить

{-# LANGUAGE OverloadedStrings #-} 

в верхней части исходного файла, в котором вы сращивать в коде шаблона Haskell (т.е. Data.hs).

+0

Вот и все. Не думал об этом, спасибо! –