2014-02-10 28 views
1

我是新來的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但它可能是不同的東西。

它是做什麼的?它是爲了什麼?

回答

3

這是爲了讓在Haskell中編寫嚴格的程序更容易,並且爲了方便起見,爲了避免爲了方便而被迫爲了「懶惰」或者非嚴格而對開發人員更嚴格。

採取例如:

> data PNat = PZero | PSuc !Nat deriving Show 

咣噹宣稱PSuc是在其參數嚴格,即段PSuc底部=底部(其中底部是一個非終止表達)。

它以指示圖案嚴格:

f !x !y = x + y 

良好參考:https://ghc.haskell.org/trac/haskell-prime/wiki/BangPatterns

+2

FWIW,砰圖案迫使第一構造的評估([WHNF](HTTP://www.haskell .ORG/haskellwiki/Weak_head_normal_form))。爲了充分強制對結構檢查進行評估['deepseq'](http://hackage.haskell.org/package/deepseq) –