为什么Haskell没有单个元素元组?

时间:2011-02-14 21:58:20

标签: haskell

我想知道为什么Haskell没有单个元素元组。是因为到目前为止还没有人需要它,或者是出于任何理性的原因?我在Real World Haskell网站http://book.realworldhaskell.org/read/types-and-functions.html#funcstypes.composite的评论中找到了一个有趣的帖子,人们猜到了各种原因:

  • 没有好的语法糖。
  • 没用。
  • 您可以认为像(1)这样的正常值实际上是单个元素元组。

但有人知道除猜测之外的原因吗?

2 个答案:

答案 0 :(得分:33)

有一个lib!

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

实际上,我们有一个我们一直使用的OneTuple。它被称为Identity,现在被用作新mtl中标准纯monads的基础:

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

它有一个重要的用途!通过提供类型* -> *的类型构造函数,它可以成为Monad,Functor等的实例(一个trival one,虽然不是 most 琐事),让我们将它用作变压器堆栈的基础。

答案 1 :(得分:9)

确切的原因是因为它完全没必要。如果你能拥有它的价值,为什么还需要一个元组呢?

语法也往往有点笨拙。在Python中,你可以有一个元组,但你需要一个尾随逗号来区分它与带括号的表达式:

onetuple = (3,)

总而言之,没有理由这样做。我确信没有“官方”原因,因为Haskell的设计者可能从未考虑过单个元素元组,因为它没有用处。

我不知道你是否在寻找除了明显的原因之外的一些原因,但在这种情况下,明显的答案是正确的。