Haskell bang符号在数据类型中起什么作用?
我是Haskell的新手,今天我通读了OpenGL源代码,发现了这个Haskell bang符号在数据类型中起什么作用?,haskell,Haskell,我是Haskell的新手,今天我通读了OpenGL源代码,发现了这个 data VertexArrayDescriptor a = VertexArrayDescriptor !NumComponents !DataType !Stride !(Ptr a) deriving ( Eq, Ord, Show ) 我试着寻找它,发现了它,但它可能是不同的东西 它有什么作用?它的目的是什么?它使用Haskell编写严格的程序变得更容易,并使严格更方便开发人员,以避免仅仅为了方便而被迫
data VertexArrayDescriptor a =
VertexArrayDescriptor !NumComponents !DataType !Stride !(Ptr a)
deriving ( Eq, Ord, Show )
我试着寻找它,发现了它,但它可能是不同的东西
它有什么作用?它的目的是什么?它使用Haskell编写严格的程序变得更容易,并使严格更方便开发人员,以避免仅仅为了方便而被迫“懒惰”或不严格 例如:
> data PNat = PZero | PSuc !Nat deriving Show
bang声明,PSuc
在其参数中是严格的,即PSuc bottom=bottom(其中bottom是一个非终止表达式)
表示图案的严格程度:
f !x !y = x + y
很好的参考:FWIW,bang模式强制计算第一个构造函数()。要完全强制对结构进行评估,请检查您的答案和模式