関数app :: SnapletInit App App
では、いくつかのフィールドを持つスナップレットを試しました。
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
withを定義しようとしました
class MyLens b where
myLens :: SnapletLens b Myex
しかし、問題は、myex-snaplet の内容をいつ取得または設定するかということです。そして、myex のフィールドを参照する方法は? 私はいくつかのことを試しました
let txt = (foo . myLens) m
しかし、それらは app メソッドでは機能しませんでした。問題は、 Snaplet のフィールドにアクセスする方法Myex
です。レンズのmyFun
使用は簡単です。または、少なくともすべてがコンパイルされます。
非常によく似た別の回答を見ました。 スナップレットの初期化中にサブスナップレットを使用しますか?
でも、交換したら
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