2017-02-13 3 views
7

Im Data.ByteString.Internal hat der ByteStringWas ist die Verwendung der doppelten Ausrufe?

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

Konstruktor Was hier ist diese Doppel Ausrufen bedeuten? Ich suchte und habe gerade, dass (!!) verwendet werden kann, um eine Liste zu indexieren (!!) :: [a] -> Int -> a.

+0

es in der Regel für * strenge * Bewertung (im Gegensatz zu * lazy evaluation *), so dass die Operanden verwendet wird, ausgewertet werden, bevor die Funktion aufgerufen wird. –

+0

@ WillemVanOnsem, Ich erinnere mich, ein Ausrufezeichen (!) Kann die Operanden strikt machen, machen doppelte Ausrufe das gleiche? – hliu

+1

http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/src/Data-ByteString-Internal.html#ByteString - wo haben Sie Ihren Code gesehen? – melpomene

Antwort

7

Dies ist nicht Teil der eigentlichen Haskell-Quelle, sondern ein (undokumentiertes) Merkmal, wie Haddock ungepackte Datentypen rendert. Siehe https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.html:

2009.01.21 Stephan Friedrichs < ...>:

Hallo,

mit Schellfisch-2.4.1 und diese Datei:

module Test where 

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

Die generierte Dokumentation sieht so aus :

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

Beachten Sie das doppelte '!' im letzten Konstruktor. Das ist nicht beabsichtigt Verhalten, oder?

Dies ist die Art und Weise GHC ziemlich unboxed Typen druckt, so dass ich dachte Haddock die gleiche Konvention folgen sollte. Hmm, vielleicht sollte Haddock ein Kapitel über Spracherweiterungen in seiner Dokumentation haben, mit einem Verweis auf die GHC-Dokumentation. Auf diese Weise ist die verwendete Sprache bei am wenigsten dokumentiert. Nicht sicher, ob es in diesem Fall hilft, da "!!" ist dort wahrscheinlich nicht dokumentiert.

Vielleicht sollten wir keine Unbox-Annotationen überhaupt anzeigen, da sie ein Implementierungsdetail sind, richtig? Wir könnten ein "!" stattdessen gibt an, dass das Argument strikt ist.

David

Verwandte Themen