在Haskell中,可以有不返回任何内容的函数吗?
在Haskell中,可以有不返回任何内容的函数吗?在Haskell中,可以有不返回任何内容的函数吗?,haskell,functional-programming,Haskell,Functional Programming,在Haskell中,可以有不返回任何内容的函数吗? 如果是这样的话,有这样的例子吗?没有。但是,您可以使用返回平凡值的函数。()类型只有一个居住者,()。这与C的void返回的概念非常相似。(我一直认为,void是个坏名字,因为从概念上讲,确实有一个居民不是零。) 下面是返回()的标准函数: 这一个看起来不太有用,但实际上可以有返回()并且很有用的函数,如 然而,在几乎所有出现这个问题的情况下,您都会对IO()类型感到更加兴奋。这类过程与世界进行一些有趣的交互,但不会产生任何有趣的信息供以后使用
如果是这样的话,有这样的例子吗?没有。但是,您可以使用返回平凡值的函数。
()
类型只有一个居住者,()
。这与C的void
返回的概念非常相似。(我一直认为,void
是个坏名字,因为从概念上讲,确实有一个居民不是零。)
下面是返回()
的标准函数:
这一个看起来不太有用,但实际上可以有返回()
并且很有用的函数,如
然而,在几乎所有出现这个问题的情况下,您都会对IO()
类型感到更加兴奋。这类过程与世界进行一些有趣的交互,但不会产生任何有趣的信息供以后使用。IO()
类型的居民比()
类型的居民多得多。例如:
bar :: IO ()
bar = do
putStrLn "What's your name?"
s <- getLine
putStrLn $ "Hello, " ++ s ++ "!"
这是一个返回过程的函数,该过程与世界交互,然后生成一个无趣的
()
值。所说的“无”,是指类型中的无构造函数,还是()
类型中的()
构造函数,或者来自Void
类型的底部值?来自Void类型的Void
类型没有显示它的值,因此,您不能使用返回Void
@JosephSible的函数。使用error
返回Void
很难被视为有用的方案。您是如何让error
返回的?
bar :: IO ()
bar = do
putStrLn "What's your name?"
s <- getLine
putStrLn $ "Hello, " ++ s ++ "!"
baz :: String -> IO ()
baz name = putStrLn $ "Hello, " ++ name ++ "!"