Haskell中不执行任何操作的IO方法

4

这是我的代码:

foo :: Int -> IO()
foo a 
   | a > 100 = putStr ""
   | otherwise = putStrLn "YES!!!"

如果函数小于100,则应输出“YES!!!”,如果大于100,则不输出任何内容。虽然上面的方法可行,但是否有更正式的方法返回空值而不是打印空字符串?例如:
foo :: Int -> IO()
foo a 
   | a > 100 = Nothing
   | otherwise = putStrLn "YES!!!"

我在暂停了几年后重新学习 Haskell,这正是我当时所追求的思路。这有助于我理解 Haskell 的思维方式,并能够以 Haskell 的方式思考(而不是 Python 等其他语言)。 - Slobodan Ilic
相关链接:https://dev59.com/KlHTa4cB1Zd3GeqPSINy。 - atravers
2个回答

11
foo :: Int -> IO ()
foo a 
   | a > 100 = return ()
   | otherwise = putStrLn "YES!!!"

6
如果你导入Control.Monad,你将可以使用whenunless函数,它们的类型如下:
when, unless :: Monad m => Bool -> m () -> m ()

在这种情况下,可以使用它。
foo a = when (not $ a > 100) $ putStrLn "YES!!!"

或者更受欢迎的形式
foo a = unless (a > 100) $ putStrLn "YES!!!"

unless 函数只是根据 when 函数的定义来定义的:

unless b m = when (not b) m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接