我正在尝试编辑顶点。我可以添加它,但当我使用更新时,我得到:
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。
答案 0 :(得分:6)
Data.Map.update
与insert
略有不同(如果您交换参数,这应该只适用于您的示例)。
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