Data.Map更新的haskell问题

时间:2014-02-07 13:06:55

标签: opengl haskell map

我正在尝试编辑顶点。我可以添加它,但当我使用更新时,我得到:

Couldn't match expected type `(GLfloat, GLfloat, GLfloat)
                                  -> Maybe (GLfloat, GLfloat, GLfloat)'
                with actual type `(t0, t1, t2)'
    In the first argument of `Map.update', namely `(- 0.75, 0.25, 0.0)'
    In the expression: Map.update (- 0.75, 0.25, 0.0) "v1" faceMap
    In an equation for `it':
        it = Map.update (- 0.75, 0.25, 0.0) "v1" faceMap

import qualified Data.Map as Map
import Graphics.UI.GLUT
import Graphics.Rendering.OpenGL

faceMap :: Map.Map [Char] (GLfloat, GLfloat, GLfloat)
faceMap = Map.fromList $
    [("v1", (-0.25, 0.25, 0.0 ))
    ,("v1", (0.75, 0.35, 0.0))
    ,("v3", (0.75, -0.15, 0.0))
    ,("v4", (-0.75, -0.25, 0.0))
    ]

如果您知道另一种方法,而不是编辑那些很棒的值,那么这就是OpenGL。

1 个答案:

答案 0 :(得分:6)

Data.Map.updateinsert略有不同(如果您交换参数,这应该只适用于您的示例)。

  • insert在地图中设置一个值,如果它已经替换了它。

  • update执行查找并使用函数根据以前的值定义值的变化。它可以返回Nothing以声明应删除该键的值,或Just新值。

也许类型签名会更好地澄清:

update :: Ord k => (a -> Maybe a) -> k -> Map k a -> Map k a

insert :: Ord k => k -> a -> Map k a -> Map k a