У меня есть много кода стиля:
do
x <- getSomething
case x of
this -> ...
that -> ...
other -> ...
Какой-либо способ того, что я объединялся "x <-..." и "случай x" строк для избавления от необходимости переменную?
Вы можете использовать оператор связывания >> =
, чтобы передать по конвейеру x
.
import System.Environment (getArgs)
main :: IO ()
main = getArgs >>= process
where process ["xxx"] = putStrLn "You entered xxx"
process ["yyy"] = putStrLn "You entered yyy"
process _ = putStrLn "Error"
Я делаю это как
foo "this" = return 2
foo "that" = return 3
main = foo =<< getSomething
. Хорошая особенность этого подхода заключается в том, что если foo является чистым, то это становится
main = foo <$> getSomething
Таким образом, код сохраняет ту же форму для несколько различных обстоятельств.
Если вам нужно что-то очень близкое к:
getSomething >>= caseOf
this -> expr1
that -> expr2
other -> expr3
Тогда я думаю, вам просто не повезло - в Haskell нет такого синтаксиса. Но знайте, что вы не одиноки. Марк Джонс определил, что язык Habit включает в себя своего рода монадический падеж с синтаксисом:
case<- getSomething of
Nothing -> expr1
Just x -> expr2 x
Он называет это оператором «Case-From» в определении языка.