2013-02-12 23 views
6

Tại sao công việc nàyTại sao GHC in 15 tuple nhưng không in 16 tuple?

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

trong khi điều này không

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

Bạn phải có cấu trúc dữ liệu phù hợp hơn 16-tuple? Đây chỉ là tò mò? – AndrewC

+1

@AndrewC Tôi đã mô hình hóa trình bổ sung 16 bit – cieplak

Trả lời

11

Bởi vì có Show dụ cho 15-tuple:

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' 

Và không có 16-tuple:

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' 

Xem docs

Các cá thể AFAIK được viết tay trong thư viện nội bộ ghc và không ai có thể cần hiển thị 16 bộ.

+2

Nếu bạn quan tâm đến nguồn, các kiểu dữ liệu là [ở đây] (http://www.haskell.org/ghc/docs/7.0.4/html/libraries/ ghc-prim-0.2.0.0/src/GHC-Tuple.html), các trường hợp Đọc là [ở đây] (http://hackage.haskell.org/packages/archive/base/3.0.1.0/doc/html/src /GHC-Read.html#line-555) và các trường hợp Hiển thị là [ở đây] (http://hackage.haskell.org/packages/archive/base/3.0.3.2/doc/html/src/GHC-Show .html # line-216). Rõ ràng nếu bạn làm quá nhiều định nghĩa này thì cuối cùng GHC sẽ phân biệt, vì vậy nó phải kết thúc ở đâu đó. –

+0

@ JeffreyBurka cảm ơn. Tôi đã cố gắng tìm nguồn trong tài liệu cho ba phiên bản mới nhất của cơ sở trên hackage, nhưng liên kết đến 'GHC.Show' không hoạt động. Re 'GHC.Tuple': Tôi đã thử lên tới 850-tuple và' ghci' biết về tất cả chúng. – Yuras

+0

Vì vậy, nó có. Những người không thể được xác định bất cứ nơi nào mặc dù, vì vậy những gì đang xảy ra ở đó? –

7

này được xác định trong Báo cáo Haskell Section 6.1.4 Tuples:

Không có trên ràng buộc về kích thước của một tuple, nhưng một số triển khai Haskell có thể hạn chế kích thước của các bộ, và hạn chế các trường hợp liên quan đến các bộ lớn hơn . Tuy nhiên, mỗi lần triển khai Haskell phải hỗ trợ các bộ dữ liệu có kích thước tối đa 15, cùng với các cá thể cho các phương thức Eq, Ord, Bounded, Read và Show. Prelude và thư viện xác định các hàm tuple như zip cho bộ dữ liệu có kích thước tối đa là 7.