tweag/capability
mtlを置き換えるLibrary
Tweag製
github
Hackage
module
Capability.Readerとか
HasHogeみたいな名前の型クラスが定義されている
mtlとの違い、mtlの問題点など
https://www.tweag.io/blog/2018-10-04-capability/
ここに書いてるが、mtlを知らなさすぎて読んでもあまり理解できないmrsekut.icon
雑に言うとmtlはボイラープレートが多いらしい
あとは同じ型を入れ子にできない?とか
同じ型も入れ子にできる
code:hs
getAB :: (HasState "a" Int m, HasState "b" Int m) => m (Int, Int)
getAB = do
a <- get @"a" -- get state under tag "a"
b <- get @"b" -- get state under tag "b"
pure (a, b)
get @"hoge"というふうにtagで識別する
#??
基本的にDerivingViaを使う感じなんかな
https://www.tweag.io/blog/2019-03-20-capability-free-monad/
https://www.tweag.io/blog/tags/capability