Chcę zrobić w Haskell coś, co wygląda tak:
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
Oczywiście nie jest to legalne, ponieważ nie ma else
. Jedna alternatywa, o której myślałem:
nop :: IO ()
nop = sequence_ []
main2 = do s <- getLine
if s == "foo" then putStr "You entered foo" else nop
To jest trochę rozwlekłe, ale w razie potrzeby zgodziłbym się na to. Byłbym zaskoczony, gdyby nie było wbudowanej wersji programu nop
.
Alternatywnie:
doIf :: Bool -> IO () -> IO ()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
Jest to bardziej zwięzłe, ale składnia nie jest szczególnie ładna. Ponownie, nie zdziwiłbym się, gdybym znalazł coś wbudowanego, co już istnieje.
Jaki jest preferowany sposób zrobienia tego?