2013-02-12 3 views
6

Perché questo lavoroPerché GHC stampa 15-tuple ma non 16-tuple?

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

mentre questo non fa

print (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) 
+3

Ci deve essere una struttura dati più adatta per te di una tupla da 16? Questo è solo per curiosità? – AndrewC

+1

@AndrewC Stavo modellando un sommatore a 16 bit – cieplak

risposta

11

Perché c'è Show istanza per 15 parametri:

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' 

e non ci sono per il 16 parametri:

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' 

Vedi docs

casi AFAIK sono somethere scritta a mano nelle biblioteche interne ghc, ed è improbabile che qualcuno avrà bisogno di mostrare 16-tuple.

+2

Se sei interessato alla fonte, i tipi di dati sono [qui] (http://www.haskell.org/ghc/docs/7.0.4/html/libraries/ ghc-prim-0.2.0.0/src/GHC-Tuple.html), le istanze di lettura sono [qui] (http://hackage.haskell.org/packages/archive/base/3.0.1.0/doc/html/src /GHC-Read.html#line-555) e le istanze Show sono [qui] (http://hackage.haskell.org/packages/archive/base/3.0.3.2/doc/html/src/GHC-Show .html # line-216). Apparentemente se fai troppe definizioni, GHC alla fine segifica, quindi deve finire da qualche parte. –

+0

@JeffreyBurka ringrazia. Ho cercato di trovare fonti nei documenti per le ultime tre versioni di base su hackage, ma i collegamenti a 'GHC.Show' non funzionano. R: 'GHC.Tuple': Ho provato fino a 850-tuple, e' ghci' sa di tutti loro. – Yuras

+0

Così fa. Tuttavia, quelli non possono essere definiti ovunque, quindi cosa sta succedendo lì? –

7

questo è definito nella Relazione Haskell Section 6.1.4 Tuples:

Non v'è alcun limite superiore alla dimensione di un tuple, ma alcune implementazioni Haskell possono limitare la dimensione di tuple, e limitare i casi associati con tuple più grandi . Tuttavia, ogni implementazione Haskell deve supportare tuple fino alla dimensione 15, insieme alle istanze per Eq, Ord, Bounded, Read e Show. Il Preludio e le librerie definiscono le funzioni di tupla come zip per le tuple fino a 7.

Problemi correlati