haskell 中的类型 () :: () 是什么意思?

what is the type () :: () in haskell means?

在前奏中我只是检查了 () 的类型它到底是什么意思

Prelude> :type ()
() :: ()

我知道您可以 return 当您不想做任何事情时,可以从函数中执行此操作。那里到底发生了什么?

()(发音单位)既是类型的名称,也是该类型的单个值。因此,'The value () has type ()' 的表达方式与

相同
:t "Hello"
"Hello" :: String

不同的命名空间

正如 Lee 所说,() 恰好既是类型的名称,也是其唯一构造函数的名称。基本上,它和你定义的一样

data Unit = Unit

f :: Unit -> Int
f Unit = 7

...当构造函数不是 nullary 时,可能会减少混淆:

newtype MyInt = MyInt Int

g :: MyInt -> Int
g (MyInt i) = i

请注意,在每种情况下,两个“相同”的名称都位于完全独立的命名空间中:请阅读示例

data TʏᴘᴇSᴄᴏᴘᴇ.Unit = VᴀʟᴜᴇSᴄᴏᴘᴇ.Unit
newtype TʏᴘᴇSᴄᴏᴘᴇ.MyInt = VᴀʟᴜᴇSᴄᴏᴘᴇ.MyInt Int

VᴀʟᴜᴇSᴄᴏᴘᴇ.MyInt 7 :: TʏᴘᴇSᴄᴏᴘᴇ.MyInt
VᴀʟᴜᴇSᴄᴏᴘᴇ.Unit :: TʏᴘᴇSᴄᴏᴘᴇ.Unit
VᴀʟᴜᴇSᴄᴏᴘᴇ.() :: TʏᴘᴇSᴄᴏᴘᴇ.()

关于单位类型

你的性格

I know you can return this from a function when you don't want to do any thing

从程序的角度来看是正确的,但在 Haskell 中,“做任何事情”并不是真正有意义的事情:函数 never “做任何事情”,他们只会产生结果。结果类型为 () 的函数也不例外:它产生一个结果,只是结果不包含任何实际信息。

如需进一步参考,请参阅 What is () in Haskell, exactly?