狀態單子「接口」 class MonadState s m where
get :: m s
put :: s -> m()
(+返回和結合)允許構建具有國家單子任何可能的計算,而不使用State構造。例如,State $ \s -> (s+1, s-1)可以寫成 do s <- get
put (s-1)
return (s+1)
相若方式,我從來
可以說我有一個功能 f :: State [Int] Int
和功能: g :: StateT [Int] IO Int
我想使用gf,並通過他們之間的狀態。是否有庫函數 StateT (return . runState f)?或者一般來說,給定一個具有相應monad的monad變換器,是否有庫函數?
通常wxHaskell程序看起來像 main = do
run gui
gui = do
....
....
GUI必須IO a類型,運行的類型爲IO a -> IO(),也存在一些run初始化程序。 我特林做到以下幾點: data AppGlobals = AG { ... some data ... }
type MApp a = StateT App
對於我在Haskell中的矢量圖形庫,我必須攜帶一個相當大的狀態:行筆畫參數,顏色,剪輯路徑等。我知道兩種這樣做的方法。引用來自Haskell-cafe的評論:「我建議你要麼使用具有可變狀態的讀取器monad,要麼使用具有不可變狀態的狀態monad」。 這是我的問題:更新一個大的不可變狀態是一個性能殺手。使用大量STRefs就像在Haskell中編寫C:它是冗長而醜陋的。 這裏是不可改變狀態: d
我試圖把握Monad的狀態,爲此我想編寫一個monadic代碼,用一個線性同餘發生器產生一個隨機數序列(可能不是很好,但我的目的只是學習State Monad,而不是建立一個好的RNG庫)。 發電機就是這個(我想生成的Bool S表示簡單的順序): type Seed = Int
random :: Seed -> (Bool, Seed)
random seed = let (a, c,