我想知道为什么Haskell没有单个元素元组。是因为到目前为止还没有人需要它,或者是出于任何理性的原因?我在Real World Haskell网站http://book.realworldhaskell.org/read/types-and-functions.html#funcstypes.composite的评论中找到了一个有趣的帖子,人们猜到了各种原因:
但有人知道除猜测之外的原因吗?
答案 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的设计者可能从未考虑过单个元素元组,因为它没有用处。
我不知道你是否在寻找除了明显的原因之外的一些原因,但在这种情况下,明显的答案是正确的。