,我有以下定义一个单子内部配套:避免模式在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