在功能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 方法中不起作用。所以问题是,如何访问 Snaplet 的字段Myex
?镜头的myFun
使用很简单,或者至少一切都可以编译。
我刚刚看到另一个看起来非常相似的答案。 在 snaplet 初始化期间使用 subsnaplet?
但是,如果我更换
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