Фрагмент Hakyll не компилируется, когда используется оператор let - PullRequest
0 голосов
/ 26 января 2019

Я играю с Hakyll и пытаюсь понять, почему он не компилируется, если я использую оператор let в следующем фрагменте кода:

main :: IO ()
main = hakyll $ do
   -- some other matches

    match "index.html" $ do
      route idRoute
      compile $ do
        posts <- recentFirst =<< loadAll "index.html"
        let indexCtx =
              listField "posts" postCtx (return posts) <>
              constField "title" "Home"                <>
              defaultContext
        getResourceBody
          >>= applyAsTemplate defaultContext
          >>= loadAndApplyTemplate "templates/default.html" defaultContext
          >>= relativizeUrls

Что я пытаюсь сделать, это просто скомпилировать простой шаблон index.html. И что мне кажется странным, это то, что он не компилируется, когда я опускаю оператор let. Затем GHCi начинает жаловаться на то, что:

    • No instance for (base-4.12.0.0:Data.Typeable.Internal.Typeable
                         a0)
        arising from a use of ‘loadAll’
    • In the second argument of ‘(=<<)’, namely ‘loadAll "index.html"’
      In a stmt of a 'do' block:
        posts <- recentFirst =<< loadAll "index.html"
      In the second argument of ‘($)’, namely
        ‘do posts <- recentFirst =<< loadAll "index.html"
            getResourceBody >>= applyAsTemplate defaultContext
              >>= loadAndApplyTemplate "templates/default.html" defaultContext
              >>= relativizeUrls’

Насколько я знаю, оператор let никоим образом не должен влиять на поведение, поскольку indexCtx даже не используется в других местах.

...