Подтвердить что ты не робот

Почему у Haskell нет ни одного элементарного кортежа?

Мне интересно, почему у Haskell нет ни одного элементарного кортежа. Разве это просто потому, что до сих пор никто не нуждался в ней или каких-либо разумных причин? Я нашел интересную тему в комментарии на веб-сайте Real World Haskell http://book.realworldhaskell.org/read/types-and-functions.html#funcstypes.composite, и люди догадались о различных причинах, таких как:

  • Нет хорошего синтаксического сахара.
  • Это бесполезно.
  • Вы можете думать, что нормальное значение, подобное (1), на самом деле является одним элементом.

Но кто-нибудь знает причину, кроме предположения?

4b9b3361

Ответ 1

Там есть lib для этого!

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

На самом деле у нас есть OneTuple, который мы используем все время. Он называется Identity и теперь используется как основа стандартных чистых монадов в новом mtl:

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

И это имеет важное значение! В силу предоставления конструктора типа * -> * его можно сделать экземпляром (триальным, предоставленным, хотя и не самым тривиальным) Monad, Functor и т.д., Что позволяет использовать его в качестве базы для трансформатора стеки.

Ответ 2

Точная причина заключается в том, что она совершенно не нужна. Зачем вам нужен один кортеж, если вы можете просто иметь его значение?

Синтаксис также имеет тенденцию быть немного неуклюжим. В Python вы можете иметь один кортеж, но вам нужна конечная запятая, чтобы отличить ее от выражения в скобках:

onetuple = (3,)

В общем, нет причин для этого. Я уверен, что нет "официальной" причины, потому что дизайнеры Haskell, вероятно, никогда даже не рассматривали один элементный кортеж, потому что он не имеет смысла.

Я не знаю, искали ли вы какие-то причины, кроме очевидного, но в этом случае очевидный ответ правильный.