【发布时间】:2013-03-12 07:53:42
【问题描述】:
在app :: SnapletInit App App 函数中,我尝试了具有几个字段的 snaplet:
m <- nestSnaplet "mys" mys $ myexInit -- Data Myex = Myex {_foo :: Text, ...}
以后在同一个函数中:
let txt1 = myFun m -- myFun :: Myex -> Text
编译器说:
Couldn't match expected type `SnapletLens a0 b0'
with actual type `Snaplet Myex'
我试图用
定义一个SnapletLens
class MyLens b where
myLens :: SnapletLens b Myex
但问题是,这是获取或设置 myex-snaplet 内容的方法吗?以及如何引用myex的字段?我尝试了几件事,比如
let txt = (foo . myLens) m
但它们在 app 方法中不起作用。那么问题来了,如何访问 SnapletMyex 的字段呢?在myFun 中,镜头的使用很简单,或者至少所有内容都可以编译。
我刚刚看到另一个看起来非常相似的答案。 Use subsnaplet during snaplet initialization?
但是,如果我替换
let txt1 = myFun m -- myFun :: Myex -> Text
与
let txt1 = foo m
编译器现在说:
Couldn't match expected type `T.Text -> f0 T.Text'
with actual type `Snaplet Myex'
我假设在上面的链接中pgPool 是pgs 的镜头。
br gsp
【问题讨论】:
标签: haskell haskell-snap-framework