モナドを使いたいとしましょう。それから、リスト内でルックアップをしたいとしReaderT [(a,b)]
ます。Maybe
これを行う簡単で、あまり珍しくない方法は次のとおりです。
最初の可能性
find a = ReaderT (lookup a)
ただし、これは、ReaderT トランスフォーマーがどのように機能するかについて、自明ではないことを主張しているように見えます。Control.Monad.Reader のソース コードを見ると、これが問題なく動作することが明らかです。しかし、これを裏付けるドキュメントを読んだことがありません。しかし、次のように find を書くこともできます:
第二の可能性
find a = do y <- ask
lift (lookup a y)
MaybeT
同様のアイデアは、 、StateT
、State
およびのラッピングにも適用されReader
ます。通常、私は最初の例のように書きますが、ほとんどの場合、2 番目の例のように書く方法は明らかであり、読みやすいとさえ言えます。だから私の質問は: 最初の例のようなコードは悪いと考えるべきですか?