Haskell:monad-loggerはロッギングで使うべきか?

またエラー処理とロギングの注意点、Debug.Trace(trace)。
1
あいや🐕 @public_ai000ya

@Mizunashi_Mana うおお…まだちょっとわからないかもしれない…ですが、 これは twitter.com/mizunashi_mana… 例えばEither e aを扱いたい時に関数の型を MonadThrow m => m a に隠蔽する、あれでしょうか?

2016-09-17 02:28:12
水無麻那 @mizunashi@vivaldi.net @Mizunashi_Mana

@public_ai000ya 主にHaskellではMonadTransを使う場合、プロジェクトで使うでかい複合モナドをプログラムに渡し、各プログラムの関数は型制約によって修飾することで依存を切り離すみたいな書き方をする場合が多く

2016-09-17 02:10:26
水無麻那 @me@ff.mizunashi.work @Mizunashi_Mana

@public_ai000ya それと概念的には同じですMonadThrowであれば、どのインスタンスでも大丈夫みたいな感じで、MonadLoggerであればどのインスタンスでも大丈夫みたいな感じですね

2016-09-17 02:35:15
あいや🐕 @public_ai000ya

@Mizunashi_Mana デバッグのためにロガーを利用するのでなく…は確かにですが、 ロガーのためにエラー処理をするのでなく…そんなケースがあるんですね…かなりの知見…。

2016-09-17 02:37:11
水無麻那 @me@ff.mizunashi.work @Mizunashi_Mana

@public_ai000ya 例えば、エラーが起きた時にそのエラーをロガーに流したいと思ってエラー処理をするのはアンチパターンです(だと僕は思っています)。エラーが起きていた場合、それはエラー処理をしなければならないもので、それはロガーに流すかとは関係無いからです

2016-09-17 02:39:24
水無麻那 @me@ff.mizunashi.work @Mizunashi_Mana

@public_ai000ya ただ、そこら辺をちゃんと意識しておかないと、たまにそういう処理を書いてしまう時があります(ロガーに流して満足みたいな)。そういう場合に限ってリソース管理がおろそかになっていたりするので、まあ自分に対する戒めみたいなものだと思ってください

2016-09-17 02:40:38
あいや🐕 @public_ai000ya

@Mizunashi_Mana ありがとうございます!! だいぶ助かりました。(このままだと、プログラムの型が意味なく破壊的な変更がされていた…) 後学のためと共有のためにtogetterにまとめたりしていいですか?

2016-09-17 02:38:44