【问题标题】:what is the type () :: () in haskell means? [duplicate]haskell 中的 type () :: () 是什么意思? [复制]
【发布时间】:2015-02-01 10:27:20
【问题描述】:

在前奏中,我刚刚检查了 () 的类型,它的真正含义是什么

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

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

【问题讨论】:

    标签: haskell functional-programming


    【解决方案1】:

    不同的命名空间

    正如 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ᴄᴏᴘᴇ.()
    

    关于单位类型

    你的性格

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

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

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

    【讨论】:

      【解决方案2】:

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

      :t "Hello"
      "Hello" :: String
      

      【讨论】:

        猜你喜欢
        • 2015-10-23
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 1970-01-01
        • 2015-07-31
        • 2012-04-22
        • 1970-01-01
        • 2020-10-27
        相关资源
        最近更新 更多