我是Haskell的新手,今天我读了OpenGL源代码,我发现了这个
data VertexArrayDescriptor a =
VertexArrayDescriptor !NumComponents !DataType !Stride !(Ptr a)
deriving ( Eq, Ord, Show )
我试图搜索它并找到http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/bang-patterns.html,但它可能是不同的。
它做什么?它的用途是什么?
答案 0 :(得分:4)
这样可以更容易地在Haskell中编写严格的程序,并使开发人员更加方便地避免被迫为了方便而被迫“懒惰”或非严格。
以例如:
> data PNat = PZero | PSuc !Nat deriving Show
bang声明PSuc
在其参数中是严格的,即PSuc bottom = bottom(其中bottom是非终止表达式)。
表明模式的严格性:
f !x !y = x + y
好参考:https://ghc.haskell.org/trac/haskell-prime/wiki/BangPatterns