я часто пишу код, который выглядит следующим образом:Кормление монадическое выражение в, если или когда
import System.Directory (doesFileExist)
import Control.Monad (unless)
example = do
fileExists <- doesFileExist "wombat.txt"
unless fileExists $ putStrLn "Guess I should create the file, huh?"
Возможно, лучший способ это:
example2 =
doesFileExist "wombat.txt" >>=
(\b -> unless b $ putStrLn "Guess I should create the file, huh?")
Какой самый лучший подход здесь?
Связывание 'unless' с' (>> =) 'можно сделать с помощью раздела,' 'что-то >> = (' unless' SomeAction) '', если 'someAction' коротка. Если он не короткий, я думаю: 'do bool <- что-то; если только bool $ не делает ничего лучше. –
Вы можете использовать 'mfilter', который работает еще лучше, если вы встраиваете свои вычисления в' MaybeT'. –