我使用國家Monad維護我的世界,並使用光澤圖形。光澤在每個「打勾」之間傳遞一個「世界」對象以繼續前進。問題是,對於這個工作,我需要能夠定義:不能逃脫國家Monad
wsToPicture :: WorldState() -> Picture
其中
World = data World = World { ... }
WorldState = type WorldState = State World
Picture = Gloss's representation of a graphic.
我能得到的最好的是:
wsToPicture :: WorldState() -> Picture
wsToPicture ws = toPicture . execState ws startingWorld
其中
startingWorld = The very initial state of the world
toPicture = World -> Picture (Defined elsewhere)
其中至少編譯,但世界重置每打勾。把startingWorld
放在那裏純粹是爲了編譯;我知道這是錯的。如果我沒有當前的World
給出它,我如何才能擺脫State
monad?唯一可用的世界是在WorldState
之內,我不能使用get
來提取它,因爲只要我使用>>=
,函數必須返回WorldState
。
我假設我誤解了一些東西。有人可以闡明可能的情況嗎?
你嘗試過'wsToPicture :: WorldState Picture'; 'wsToPicture = fmap toPicture get',那麼你可以把所有的東西都保存在monad狀態中,而不是試圖轉義它。 – bheklilr 2014-11-20 17:34:14
另一個定義是'wsToPicture = do {ws < - get;返回$ toPicture ws}' – bheklilr 2014-11-20 17:34:39
@bheklilr:gloss預計世界 - >圖片IIRC。 – Zeta 2014-11-20 17:34:51