state-monad

    9熱度

    3回答

    我剛剛學習Haskell,並試圖找出實現視線算法最常用的方法。 我發現的演示代碼使用狀態monad,但對我來說(我只是一個初學者)遞歸地傳遞狀態似乎更簡單。我在這裏錯過了什麼?有沒有性能問題? 查找代碼爲:http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell 感謝, 克里斯。

    7熱度

    5回答

    我需要編寫一個狀態monad,它也可以支持錯誤處理。我正在考慮使用Either monad來達到這個目的,因爲它也可以提供有關導致錯誤的詳細信息。我找到了使用Maybe monad的狀態monad的定義,但是我無法修改它來使用Either而不是Maybe。以下是代碼: newtype StateMonad a = StateMonad (State -> Maybe (a, State)) i

    10熱度

    1回答

    狀態單子「接口」 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) 相若方式,我從來

    2熱度

    2回答

    我想編寫一個函數在Haskell 這個計算使用狀態單子平均是我寫的代碼就 import Control.Monad.State type MyState = (Double,Double) media s (a,n)= ((a*n+s)/(n+1),n+1) getAverage:: Double ->State MyState s1-> Double getAverage s c=ge

    10熱度

    2回答

    我終於忍住瞭如何使用monads(不知道我是否理解他們......),但我的代碼永遠不會很優雅。我想是因爲對Control.Monad上所有這些功能如何能夠真正幫助的缺乏控制。所以我認爲在使用狀態monad的特定代碼中要求提供這方面的技巧會很好。 代碼的目的是計算多種隨機遊動的,而它的東西,我想更復雜的東西前做。問題是,我在同時有兩個狀態的計算,我想知道如何優雅撰寫他們: ,更新隨機數發生器的功能

    15熱度

    3回答

    可以說我有一個功能 f :: State [Int] Int 和功能: g :: StateT [Int] IO Int 我想使用gf,並通過他們之間的狀態。是否有庫函數 StateT (return . runState f)?或者一般來說,給定一個具有相應monad的monad變換器,是否有庫函數?

    1熱度

    2回答

    通常wxHaskell程序看起來像 main = do run gui gui = do .... .... GUI必須IO a類型,運行的類型爲IO a -> IO(),也存在一些run初始化程序。 我特林做到以下幾點: data AppGlobals = AG { ... some data ... } type MApp a = StateT App

    4熱度

    3回答

    我經歷了一些關於State monad的教程,我想我明白了。 例如,在this nice tutorial: import Data.Word type LCGState = Word32 lcg :: LCGState -> (Integer, LCGState) lcg s0 = (output, s1) where s1 = 1103515245 * s0 + 12345

    12熱度

    3回答

    對於我在Haskell中的矢量圖形庫,我必須攜帶一個相當大的狀態:行筆畫參數,顏色,剪輯路徑等。我知道兩種這樣做的方法。引用來自Haskell-cafe的評論:「我建議你要麼使用具有可變狀態的讀取器monad,要麼使用具有不可變狀態的狀態monad」。 這是我的問題:更新一個大的不可變狀態是一個性能殺手。使用大量STRefs就像在Haskell中編寫C:它是冗長而醜陋的。 這裏是不可改變狀態: d

    16熱度

    3回答

    我試圖把握Monad的狀態,爲此我想編寫一個monadic代碼,用一個線性同餘發生器產生一個隨機數序列(可能不是很好,但我的目的只是學習State Monad,而不是建立一個好的RNG庫)。 發電機就是這個(我想生成的Bool S表示簡單的順序): type Seed = Int random :: Seed -> (Bool, Seed) random seed = let (a, c,