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実装は、Eq、Ord、Bounded、Read、およびShowのインスタンスとともに、サイズ15までのタプルをサポートする必要があります。Preludeとライブラリは、最大サイズ7のタプルのzipなどのタプル関数を定義します。

于 2013-02-12T07:07:47.163 に答える