次の定義があります。
env = DataMap.fromList [
("foo",42), ("bar",69),
("baz",27), ("qux",0)
]
doSomething:: String → Writer [String] Int
doSomething s = do
let v = DataMap.lookup s env
case v of
Nothing → fail $ s ++ " not found"
Just a → do
tell [s ++ " → " ++ (show a)]
return a
このコードで私を本当に悩ませているのは、doSomething 内でのパターン マッチングの使用です。モナドを使用する目的を完全に無効にします。モナドトランスフォーマーを使用せずにモナド関数のみを使用して doSomething 関数を書き直す方法はありますか?