在Haskell中,您可以拥有不返回任何内容的函数吗?

在 Haskell 中,您可以拥有不返回任何内容的函数吗?如果是这样,是否有这样的例子?

回答

不可以。但是,您可以使用返回微不足道的值的函数。该()类型只有一个居民,()。这与 C 的void返回概念非常相似。(我一直觉得这void是一个不好的名字,因为从概念上讲,确实有一个居民而不是零。)

这是返回的标准函数()

foo :: Int -> String -> ()
foo _ _ = ()

这个看起来不太有用,但实际上可以有返回()并有用的函数,例如rnf.

但是,在几乎所有出现此问题的情况下,您都会对这种IO ()类型感到更加兴奋。这是一种与世界进行一些有趣交互的过程,但不会产生任何有趣的信息供以后消费。该类型的居民IO ()比该类型的居民多很多()。例如:

bar :: IO ()
bar = do
    putStrLn "What's your name?"
    s <- getLine
    putStrLn $ "Hello, " ++ s ++ "!"

但是关于术语的一句话:这不是大多数人使用该词的方式的“函数”——毕竟,它不能传递任何参数!

这两个特征——功能和程序——可以有利地混合在一起。如果您从命令行以外的其他地方获取名称,您可能需要参数化上述过程,如下所示:

baz :: String -> IO ()
baz name = putStrLn $ "Hello, " ++ name ++ "!"

这是一个返回过程的函数,该过程与世界交互,然后产生一个无趣的()值。


以上是在Haskell中,您可以拥有不返回任何内容的函数吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>