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

haskell中的类型():()是什么意思?,haskell,functional-programming,Haskell,Functional Programming,在前奏曲中,我刚刚检查了()的类型,它到底是什么意思 Prelude> :type () () :: () 我知道当你不想做任何事情时,你可以从函数中返回这个。实际上发生了什么?()(发音单位)既是类型的名称,也是该类型的单个值。因此,它表示“值()具有类型()”,方式与 :t "Hello" "Hello" :: String 不同名称空间 正如Lee所说,()恰好既是类型的名称,也是它唯一的构造函数的名称。基本上,这和你定义的是一样的 data Unit = Unit f ::

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

Prelude> :type ()
() :: ()
我知道当你不想做任何事情时,你可以从函数中返回这个。实际上发生了什么?

()
(发音单位)既是类型的名称,也是该类型的单个值。因此,它表示“值
()
具有类型
()
”,方式与

:t "Hello"
"Hello" :: String
不同名称空间 正如Lee所说,
()
恰好既是类型的名称,也是它唯一的构造函数的名称。基本上,这和你定义的是一样的

data Unit = Unit

f :: Unit -> Int
f Unit = 7
…当构造函数不是空值时,可能更容易混淆:

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ᴄᴏᴘᴇ.()
关于单位类型 你的性格

我知道当你不想做任何事情的时候,你可以从函数中返回它

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

有关进一步参考,请参阅