,我有以下定義一個單子內部配套:避免模式在Haskell
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的內部配套的格局。它徹底打敗了使用monads的目的。有什麼方法可以在不使用monad變換器的情況下僅使用monadic函數來重寫doSomething函數?
你不是應該使用['maybe'](http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Maybe.html#v:maybe )功能? –
但是......這不正是monad變壓器的用途嗎?爲什麼不使用一個?特別是因爲你現在正在使用'fail',這並不是一個好習慣...... –
Maybe函數是通過模式匹配實現的(http://www.haskell.org/ghc/docs/6.10.2 /html/libraries/base/src/Data-Maybe.html),所以它仍然在那裏,儘管你不必看它。 – rickythesk8r