如何根据参数的类型使用函数?

时间:2014-02-05 17:54:22

标签: opengl haskell

我正在使用Haskell和OpenGL。 OpenGL有一种使用一组统一函数加载变量的方法:

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

我正在尝试将其翻译成更惯用的Haskell。我想写一个函数:

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

我的问题是我调用的函数取决于a的值。有没有办法在不编写 n 不同函数的情况下执行此操作?

1 个答案:

答案 0 :(得分:5)

定义此类函数的一种方法是定义新的type class,如:

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

每个实例都可以有像

这样的定义
instance GlUniformable Int where
    uniform location value = ...

其中value将被编译器

理解为类型Int的参数