2014-02-05 60 views
0

我使用的是Haskell和OpenGL。 OpenGL的有一個方式來加載變量使用一組統一功能:如何根據參數的類型使用函數?

glUniform1i location intValue 
glUniform1f location floatValue 
glUniform2i location intValue1 intValue2 
... etc. 

我想翻譯成更地道哈斯克爾這一點。我想編寫一個函數:

uniform :: String -> a -> IO() 
uniform location value = ... 

我的問題是,我所說的功能是依賴於a值。有沒有辦法做到這一點,而不寫n不同的功能?定義這樣的功能

回答

5

的一種方式是定義新的type class像:

class GlUniformable a where 
    uniform:: String -> a -> IO() 

每個實例可以具有定義像

instance GlUniformable Int where 
    uniform location value = ... 

其中value將由編譯器被理解爲Int類型的參數

+3

請注意,這與OpenGL Haskell綁定當前的做法非常接近:http://hackage.haskell .org/package/OpenGL-2.9.1.0/docs/Graphics-Rendering-OpenGL-GL-Shaders-Uniform.html#v:uniform –

+0

@ ThomasM.DuBuisson我已經看過一些C界面,圖書館,但我沒有想到要找到這個。謝謝!編輯:並感謝,Odomontois。我不確定自從它開始偏離標準的OpenGL(太多?)以後,是否會走這條路。但我會以其他形式使用這個想法。 – sdasdadas

相關問題