Em Haskell, o equivalente a:
if let x = xOptional {
// yada yada
}
Seria:
case maybeX of
Just x -> fazCoisas -- yada yada
Nothing -> return () -- Não faz nada
Acho que a diferença marcante entre essas duas estruturas é que em Haskell tudo é uma expressão. Efetivamente, eu posso ter:
let x = case maybeX of
Just x -> x
Nothing -> valorPadrao
Acontece que na prática, quando você tem um bloco do
, você está programando de forma imperativa como no Swift. Então nada te impede de escrever algo tipo:
letOptional maybeX funcao = case maybeX of
-- Se x estiver no maybe executa o bloco
Just x -> funcao x
-- Caso contrário não faz nada
Nothing -> return ()
O que seria usado como:
main = do
letOptional (Just 10) $ \x -> do
print x -- 10
letOptional Nothing $ \x -> do
print "Não executo"
O último bloco é exatamente: