2011-02-14 59 views
24

我想知道爲什麼Haskell沒有一個元素元組。是因爲目前爲止沒有人需要它,或者任何理性的原因?我發現一個有趣的線程在現實世界Haskell的網站http://book.realworldhaskell.org/read/types-and-functions.html#funcstypes.composite一個評論,人們猜測各種原因,如:爲什麼Haskell沒有單個元素元組?

  • 沒有好的語法糖。
  • 這是沒用的。
  • 您可以認爲像(1)這樣的正常值實際上是單個元素元組。

但有沒有人知道除了猜測之外的原因?

+10

這三點聽起來很吸引人。 – delnan 2011-02-14 22:07:03

+7

你可能會問,爲什麼數學中沒有單一的元素元組? – luqui 2011-02-15 04:17:02

+1

@luqui存在,它被稱爲singleton - https://en.wikipedia.org/wiki/Tuple – 2016-03-30 03:56:58

回答

7

確切原因是因爲它完全沒有必要。如果你能夠擁有它的價值,爲什麼你需要一個元組?

語法也往往有點笨拙。在Python中,你可以有一個元組,但你需要一個結尾逗號從括號表達式區分開來:

onetuple = (3,) 

總而言之,沒有理由。我敢肯定沒有「官方」的理由,因爲Haskell的設計師可能從來沒有考慮過單個元素元組,因爲它沒有用處。

我不知道你是否在尋找超出顯而易見的原因,但在這種情況下,明顯的答案是正確的。

32

有一個解釋!

http://hackage.haskell.org/packages/archive/OneTuple/0.2.1/doc/html/Data-Tuple-OneTuple.html

事實上,我們有我們用所有的時間OneTuple。這就是所謂的身份,現在在新的MTL作爲標準純單子的基礎:

http://hackage.haskell.org/packages/archive/transformers/0.2.2.0/doc/html/Data-Functor-Identity.html

,它有一個重要的用途!通過提供類型爲* -> *的類型構造函數,可以將它作爲Monad,Functor等的一個實例(三元一,授予,但不是最常見的),它允許我們將它用作變換器的基礎棧。

相關問題