繁体   English   中英

不在范围内:“抢劫”(我不在使用Lens)

[英]Not in scope: ‘heist’ (I'm not using Lens)

我在Snap haskell应用程序中的这段代码中有错误:

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’

而且我找不到“ heist”函数在哪个包中。

请注意,我没有使用Lens,也不想使用。 有什么方法不使用它们并使我的代码编译吗?

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

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

SnapletLens只是lensAlens的类型同义词。

这也使我怀疑heist最初是使用lens由模板Haskell派生的功能。 可能发生的是该App过去看起来像这样:

-- You may need to import Contol.Lens.TH
data App = App { _heist :: Snaplet (Heist App) }
makeLenses ''App

这本来可以heist的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM