Je l'extrait de code de code suivant:Comment écrire commun « si » ramification dans Haskell
srcaddr <- getIfaceAddr iface >>= inet_ntoa . fromJust
dstaddr <- getDestAddr iface >>= inet_ntoa . fromJust
-- I want to perform actions only if neither getIfaceAddr
-- nor getDestAddr returned Nothing
action1 srcaddr dstaddr
action2 srcaddr dstaddr
action3 srcaddr dstaddr
getIfaceAddr :: String -> IO (Maybe HostAddress)
getDestAddr :: String -> IO (Maybe HostAddress)
Comment écrire ce code dans « nice Haskell »? Je pensais à la monade MaybeT, mais d'une manière ou d'une autre, je n'arrivais pas à la faire fonctionner. J'essayais de faire un peu de «levage», mais je n'arrivais pas à assembler les types ensemble. Je peux changer la signature de getIfaceAddr/getDestAddr.
En tant que sidenote: pourquoi inet_ntoa 'HostAddress -> IO String'? Je ne pense pas qu'il y ait d'effets secondaires, n'est-ce pas?
Oui, c'est pourquoi je demande - parce que je n'ai pas aimé le juste :) – ondra