Juste pour démontrer mon commentaire à la réponse de Marc,
import System.Environment (getArgs)
main :: IO()
main = do
args <- getArgs
let l = length args
if l == 0
then putStrLn "foo"
else putStrLn "bar"
est Haskell juridique.
Avec l'extension {-# LANGUAGE RebindableSyntax #-}
de GHC 7.0, vous pouvez même sortir avec
class IfThenElse a b c d | a b c -> d where
ifThenElse :: a -> b -> c -> d
instance IfThenElse Bool a a a where
ifThenElse True = const
ifThenElse False = flip const
instance (Monad m, IfThenElse a (m b) (m b) (m b))
=> IfThenElse (m a) (m b) (m b) (m b) where
ifThenElse = liftM ifThenElse
main =
if liftM null getArgs
then putStrLn "foo"
else putStrLn "bar"
(Shamelessly singé de blog.n-sch.de.)
Merci un bouquet! – sentinel
A l'intérieur d'un 'do', vous n'avez pas besoin de' in' après un 'let'; il suffit de revenir à l'indentation 'do'. Voir http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-470003.14 – ephemient