2017-02-13 15 views
7

Trong Data.ByteString.Internal, các ByteString có constructorCách sử dụng dấu hai chấm là gì?

PS !!(ForeignPtr Word8) !!Int !!Int 

không những cảm thán đôi có ý nghĩa gì ở đây? Tôi tìm kiếm và chỉ nhận được rằng (!!) có thể được sử dụng để lập chỉ mục một danh sách (!!) :: [a] -> Int -> a.

+0

Nó thường được sử dụng cho * * đánh giá nghiêm ngặt (trái ngược với đánh giá * lười *) để các toán hạng được đánh giá trước khi hàm được gọi. –

+0

@WillemVanOnsem, tôi nhớ một dấu chấm than (!) Có thể làm cho các toán hạng nghiêm ngặt, các dấu chấm than đôi có giống nhau không? – hliu

+1

http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/src/Data-ByteString-Internal.html#ByteString - bạn đã thấy mã của mình ở đâu? – melpomene

Trả lời

7

Đây không phải là một phần của nguồn Haskell thực tế mà là tính năng (không có giấy tờ) về cách Haddock hiển thị các kiểu dữ liệu không được hộp. Xem https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.html:

2009/1/21 Stephan Friedrichs < ...>:

Hi,

sử dụng haddock-2.4.1 và tập tin này:

module Test where 

data Test 
    = NonStrict Int 
    | Strict !Int 
    | UnpackedStrict {-# UNPACK #-} !Int 

Tài liệu được tạo trông giống như sau :

data Test 
Constructors 
NonStrict Int 
Strict !Int 
UnpackedStrict !!Int 

Lưu ý đôi '!' trong hàm tạo cuối cùng. Đây không phải là hành vi , đúng không?

Đây là cách GHC in đẹp các loại không có hộp, vì vậy tôi nghĩ Haddock nên tuân theo quy ước tương tự. Hmm, có lẽ Haddock nên có một chương về các phần mở rộng ngôn ngữ trong tài liệu của nó, với tham chiếu vào tài liệu GHC. Bằng cách đó, ngôn ngữ được sử dụng là tại ít được ghi lại. Không chắc chắn nếu nó giúp trong trường hợp này mặc dù, kể từ khi "!!" có lẽ không được ghi chép ở đó.

Có lẽ chúng ta không nên hiển thị chú thích unbox vì chúng là chi tiết triển khai, phải không? Chúng tôi có thể hiển thị một "!" thay vào đó, chỉ ra rằng đối số là nghiêm ngặt.

David

Các vấn đề liên quan