爆炸符号在数据类型中的作用是什么?

时间:2014-02-10 11:55:01

标签: haskell

我是Haskell的新手,今天我读了OpenGL源代码,我发现了这个

data VertexArrayDescriptor a =
   VertexArrayDescriptor !NumComponents !DataType !Stride !(Ptr a)
   deriving ( Eq, Ord, Show )

http://hackage.haskell.org/package/OpenGL-2.9.1.0/docs/src/Graphics-Rendering-OpenGL-GL-VertexArrays.html#VertexArrayDescriptor

我试图搜索它并找到http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/bang-patterns.html,但它可能是不同的。

它做什么?它的用途是什么?

1 个答案:

答案 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