不在范围内:'抢劫'(我不使用镜头)

时间:2016-02-26 06:32:44

标签: haskell haskell-snap-framework

我在Snap haskell app中的代码中有错误:

import Snap.Http.Server
import Snap.Core
import Snap.Snaplet
import Snap.Snaplet.Heist
import Snap.Util.FileServe
import Snap.Util.GZip
import Heist.Interpreted
import Heist

data App = App { appHeist :: Snaplet (Heist App) }

routes :: [(ByteString, Handler App App ())]
routes = [("", serveDirectory "static")]

appInit :: SnapletInit App App
appInit = makeSnaplet "app" "An snaplet example application." Nothing $ do
    h <- nestSnaplet "" heist $ heistInit "templates"
    addRoutes routes
    return $ App h

错误是:

Not in scope: ‘heist’

我无法找到功能&#34; heist&#34;是。

请注意,我没有使用镜头而且不想这样做。 有没有办法不使用它们并使我的代码编译?

1 个答案:

答案 0 :(得分:1)

我对Snap不熟悉,但从nestSnaplet的类型签名判断,您似乎需要使用某种类型的镜头。 nestSnaplet有签名

nestSnaplet :: ByteString -> SnapletLens v v1 -> SnapletInit b v1-> Initializer b v (Snaplet v1)

其中SnapletLens只是来自Alens的{​​{1}}的同义词同义词。

这也让我怀疑lens最初是使用heist制作的模板Haskell派生函数。可能发生的事情是lens过去看起来像这样:

App

这会使-- You may need to import Contol.Lens.TH data App = App { _heist :: Snaplet (Heist App) } makeLenses ''App 成为镜头。