我正在使用Haskell和OpenGL。 OpenGL有一种使用一组统一函数加载变量的方法:
glUniform1i location intValue
glUniform1f location floatValue
glUniform2i location intValue1 intValue2
... etc.
我正在尝试将其翻译成更惯用的Haskell。我想写一个函数:
uniform :: String -> a -> IO ()
uniform location value = ...
我的问题是我调用的函数取决于a
的值。有没有办法在不编写 n 不同函数的情况下执行此操作?
答案 0 :(得分:5)
定义此类函数的一种方法是定义新的type class,如:
class GlUniformable a where
uniform:: String -> a -> IO()
每个实例都可以有像
这样的定义instance GlUniformable Int where
uniform location value = ...
其中value
将被编译器
Int
的参数