6

为什么这行得通

print (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True)

虽然这不是

print (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True)
4

2 回答 2

11

因为有Show15 元组的实例:

Prelude> :i (,,,,,,,,,,,,,,)
data (,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o
  = (,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o
    -- Defined in `GHC.Tuple'
<<skip>>
instance (Read a, Read b, Read c, Read d, Read e, Read f, Read g,
          Read h, Read i, Read j, Read k, Read l, Read m, Read n, Read o) =>
         Read (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
  -- Defined in `GHC.Read'
instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g,
          Show h, Show i, Show j, Show k, Show l, Show m, Show n, Show o) =>
         Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
  -- Defined in `GHC.Show'

并且没有 16 元组:

Prelude> :i (,,,,,,,,,,,,,,,)
data (,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p
  = (,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p
    -- Defined in `GHC.Tuple'

查看文档

AFAIK 实例是在 ghc 内部库中的某处手写的,不太可能有人需要显示 16 元组。

于 2013-02-12T02:44:20.867 回答
7

这在 Haskell 报告第 6.1.4 节元组中定义:

元组的大小没有上限,但一些 Haskell 实现可能会限制元组的大小,并限制与较大元组关联的实例。然而,每个 Haskell 实现都必须支持最大为 15 的元组,以及 Eq、Ord、Bounded、Read 和 Show 的实例。Prelude 和库定义元组函数,例如 zip 用于最大为 7 的元组。

于 2013-02-12T07:07:47.163 回答