2011-02-14 56 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等的一个实例(三元一,授予,但不是最常见的),它允许我们将它用作变换器的基础栈。

相关问题