【发布时间】:2020-12-04 06:03:02
【问题描述】:
我正在尝试在一个名为“GLFW-b-Demo”的现有项目上构建自己的项目。
它显然是使用一种叫做“RWST”的东西来模拟环境和状态:
data Env = Env
{ envEventsChan :: TQueue Event
, envWindow :: !GLFW.Window
, envGear1 :: !GL.DisplayList
, envGear2 :: !GL.DisplayList
, envGear3 :: !GL.DisplayList
, envPlane :: !GL.DisplayList
, envBlobs :: ![Blob]
, envZDistClosest :: !Double
, envZDistFarthest :: !Double
}
data State = State
{ stateWindowWidth :: !Int
, stateWindowHeight :: !Int
, stateXAngle :: !Double
, stateYAngle :: !Double
, stateZAngle :: !Double
, stateGearZAngle :: !Double
, stateZDist :: !Double
, stateMouseDown :: !Bool
, stateDragging :: !Bool
, stateDragStartX :: !Double
, stateDragStartY :: !Double
, stateDragStartXAngle :: !Double
, stateDragStartYAngle :: !Double
}
type Demo = RWST Env () State IO
从那个环境中检索一些东西很容易:
blobs <- asks envBlobs
但我还需要能够修改那些“变量”的值。 我是否需要将其移至状态,以便能够更改它的值,或者我还可以修改“env”部分的内容吗?
【问题讨论】:
-
大致来说,
RWST r w s t用于r是只读的,w是只写的(只追加),s是读/写的。如果您需要从那时起修改某些值,通常必须使其成为读/写s的一部分。