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

时间:2015-02-01 10:27:21

标签: haskell functional-programming

在前奏中我刚检查了()的类型是什么意思

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

我知道当你不想做任何事情时,你可以从函数中返回它。那里到底发生了什么?

2 个答案:

答案 0 :(得分:8)

不同的名称空间

正如李所说,()恰好是一个类型的名称,也是它唯一的构造函数。基本上,它与您定义的

相同
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ᴄᴏᴘᴇ.()

关于单位类型

您的表征

  

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

从程序的角度来看,

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

有关详细信息,请参阅What is () in Haskell, exactly?

答案 1 :(得分:3)

()(发音为unit)既是类型的名称,也是该类型的单个值。因此,与“

”一样,“价值()的类型()”也是如此
:t "Hello"
"Hello" :: String