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

在Haskell中,可以有不返回任何内容的函数吗?,haskell,functional-programming,Haskell,Functional Programming,在Haskell中,可以有不返回任何内容的函数吗? 如果是这样的话,有这样的例子吗?没有。但是,您可以使用返回平凡值的函数。()类型只有一个居住者,()。这与C的void返回的概念非常相似。(我一直认为,void是个坏名字,因为从概念上讲,确实有一个居民不是零。) 下面是返回()的标准函数: 这一个看起来不太有用,但实际上可以有返回()并且很有用的函数,如 然而,在几乎所有出现这个问题的情况下,您都会对IO()类型感到更加兴奋。这类过程与世界进行一些有趣的交互,但不会产生任何有趣的信息供以后使用

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

没有。但是,您可以使用返回平凡值的函数。
()
类型只有一个居住者,
()
。这与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 ++ "!"