在Data.ByteString.Internal中,ByteString具有构造函数
PS !!(ForeignPtr Word8) !!Int !!Int
Run Code Online (Sandbox Code Playgroud)
这些双重惊叹在这里意味着什么?我搜索并得到(!!)可用于索引列表(!!) :: [a] -> Int -> a.
这不是实际Haskell源的一部分,而是Haddock如何呈现未装箱数据类型的(未记录的)功能.请参阅https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.html:
2009/1/21 Stephan Friedrichs <...>:
嗨,
使用haddock-2.4.1和这个文件:
Run Code Online (Sandbox Code Playgroud)module Test where data Test = NonStrict Int | Strict !Int | UnpackedStrict {-# UNPACK #-} !Int生成的文档如下所示:
Run Code Online (Sandbox Code Playgroud)data Test Constructors NonStrict Int Strict !Int UnpackedStrict !!Int注意双'!' 在最后一个构造函数中.这不是预期的行为,是吗?
这是GHC非常打印未装箱类型的方式,所以我认为Haddock应遵循相同的惯例.嗯,也许Haddock应该在其文档中有一章关于语言扩展,并参考GHC文档.这样使用的语言至少记录在案.不知道在这种情况下是否有帮助,因为"!!" 可能没有在那里记录.
也许我们不应该显示unbox注释,因为它们是一个实现细节,对吧?我们可以显示一个"!" 相反,表明参数是严格的.
大卫