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中,“做任何事情”并不是一个真正有意义的说法:函数从来不会“做任何事情”,它们只会产生结果。结果类型为()
的函数也不例外:它生成一个结果,只是结果不包含实际信息
有关进一步参考,请参阅