在Data.ByteString.Internal,该字节串具有构造器双重感叹号的用法是什么?
PS !!(ForeignPtr Word8) !!Int !!Int
是什么,这些双惊叹这里的意思?我搜索并刚刚得到(!!)可用于索引列表(!!) :: [a] -> Int -> a
。
在Data.ByteString.Internal,该字节串具有构造器双重感叹号的用法是什么?
PS !!(ForeignPtr Word8) !!Int !!Int
是什么,这些双惊叹这里的意思?我搜索并刚刚得到(!!)可用于索引列表(!!) :: [a] -> Int -> a
。
这不是实际Haskell源代码的一部分,而是Haddock如何渲染无箱数据类型的一个(未记录的)特性。见https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.html:
2009年1月21日斯蒂芬·弗里德里希< ...>:使用
嗨,
鳕鱼-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注释,因为它们是 的一个实现细节,对不对?我们可以显示一个“!”相反, 表明参数是严格的。
大卫
它通常用于* *严格评估(与*惰性计算*),所以操作数调用的函数之前进行评估。 –
@WillemVanOnsem,我记得有一个感叹号(!)可以使操作符严格,做双重惊叹号吗? – hliu
http://hackage.haskell.org/package/bytestring-0.10.8.1/docs/src/Data-ByteString-Internal.html#ByteString - 你在哪里看到你的代码? – melpomene