Я играю с 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
даже не используется в других местах.