2013-02-12 10 views
6

Dlaczego to działaDlaczego GHC drukuje 15-tki, ale nie 16-krotne?

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

Choć nie

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

Musi istnieć bardziej odpowiednia struktura danych niż 16-tka? To tylko z ciekawości? – AndrewC

+1

@AndrewC Modelowałem 16-bitowy adder – cieplak

Odpowiedz

11

Ponieważ istnieje Show przykład dla 15-tki:

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' 

I nie ma dla 16-tki:

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' 

Zobacz docs

przypadki AFAIK są ręcznie napisany somethere w GHC bibliotek wewnętrznych, i jest mało prawdopodobne, ktoś będzie musiał pokazać 16-tki.

+2

Jeśli interesuje Cię źródło, typy danych są [tutaj] (http://www.haskell.org/ghc/docs/7.0.4/html/libraries/ ghc-prim-0.2.0.0/src/GHC-Tuple.html), instancje odczytu są [tutaj] (http://hackage.haskell.org/packages/archive/base/3.0.1.0/doc/html/src /GHC-Read.html#line-555), a wystąpienia programu są [tutaj] (http://hackage.haskell.org/packages/archive/base/3.0.3.2/doc/html/src/GHC-Show .html # line-216). Wygląda na to, że jeśli zrobisz zbyt wiele z tych definicji, GHC ostatecznie ulegnie segregacji, więc musi się gdzieś skończyć. –

+0

@JeffreyBurka dzięki. Próbowałem znaleźć źródła w dokumentach dla najnowszych trzech wersji baz w hackage, ale linki do 'GHC.Show' nie działają. Re 'GHC.Tuple': Próbowałem do 850-tki, a' ghci' wiedział o nich wszystkich. – Yuras

+0

A więc tak. Nie można ich jednak nigdzie zdefiniować, więc co się tam dzieje? –

7

ta jest definiowana w raporcie Haskell Section 6.1.4 Tuples:

Nie ma górnej granicy wielkości krotce, ale niektóre realizacje Haskell mogą ograniczać rozmiar krotki i ograniczyć przypadki związane z większymi krotki . Jednak każda implementacja Haskell musi obsługiwać krotki do rozmiaru 15 wraz z instancjami dla Eq, Ord, Bounded, Read i Show. Preludium i biblioteki definiują funkcje krotek, takie jak zip dla krotek do rozmiaru 7.

Powiązane problemy