2017-02-13 5 views
7

は、延ByteStringはコンストラクタ二重の感嘆符の使い方は何ですか? Data.ByteString.Internalで

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

これらの二重叫び声がここで何を意味していますか?私は検索して、ちょうどそれを得ました(!!)は、リスト(!!) :: [a] -> Int -> aをインデックスするために使用することができます。

+0

それは通常(*遅延評価とは対照的に*)*厳しい*評価のために使用されるので、関数が呼び出される前に、オペランドが評価されます。 –

+0

@WillemVanOnsem、私は1つの感嘆符(!)がオペランドを厳密にすることができるのを覚えていますが、二重の感嘆符も同じですか? – hliu

+1

http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/src/Data-ByteString-Internal.html#ByteString - コードはどこに表示されましたか? – melpomene

答えて

7

これは実際のHaskellソースではなく、Haddockがボックス化されていないデータ型をレンダリングする方法の(文書化されていない)機能です。

2009年1月21日ステファン・フリードリッヒ< ...>:https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.htmlを参照してくださいハドック-2.4.1と、このファイルを使用して

こんにちは、

module Test where 

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

生成されたドキュメントは次のようになります:

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

「!最後のコンストラクタでこれは、 の動作を意図したものではありませんか?

これは、GHCがボックス化していないタイプをかなりプリントする方法です。そのため、Haddock は同じ規則に従うべきだと思いました。おそらくHaddockは、ドキュメントの言語拡張について の章を、GHCのドキュメントへの参照は としているはずです。そうすれば、使用言語は少なくとも文書化された になります。しかし、このケースでは "!!" はおそらくそこに記載されていません。

おそらく、 実装の詳細なので、unbox注釈を表示しないでください。私たちは1つの "!"代わりに、引数がstrictであることを示す を示します。

デビッド

関連する問題