双重感叹词的用法是什么?

时间:2017-02-13 11:55:26

标签: haskell

在Data.ByteString.Internal中,ByteString具有构造函数

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

这些双重感叹词在这里意味着什么?我搜索并得到(!!)可用于索引列表(!!) :: [a] -> Int -> a

1 个答案:

答案 0 :(得分:7)

这不是实际Haskell源的一部分,而是Haddock如何呈现未装箱数据类型的(未记录的)功能。见https://mail.haskell.org/pipermail/haskell-cafe/2009-January/054135.html

  

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

     
    

您好,

         

使用haddock-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注释,因为它们是   一个实现细节,对吗?我们可以显示一个"!"代替,   表明论证是严格的。

     

大卫