state-monad

    3熱度

    1回答

    我在寫一個函數,它需要一個謂詞p和一個列表。它 返回([value],[state])其中第一個列表包含通過p的元素,第二個包含不包含的元素。然而,當我運行 runState (myFunc even [1,2,3,4,5]) [] 我得到([2,4,5,3,1],[5,3,1]),其中失敗的元素被不正確地存儲在[value]。我相信這是由於get更新狀態和值,但我一直無法找到一種方法來更新狀

    2熱度

    2回答

    我明白,在Haskell中,State monad非常有用,因爲沒有可變變量(除非我們在IO monad中)。 但是,斯卡拉的交易是什麼? State Monad是否適用於有可變變量的語言? 從某種意義上說,所有State Monad允許的是use some local mutable variables within the Monad context。例如: newtype Labeled a

    2熱度

    1回答

    我只是哈斯克爾單子玩弄和我不斷收到,我似乎無法修復的錯誤。我的代碼段使用狀態Monad將字符串中的前兩個字符添加到一起,並將它們作爲狀態的一部分返回。我的「放」行不斷給我的錯誤: * Non type-variable argument in the constraint: MonadState [a] m (Use FlexibleContexts to permit this) *

    4熱度

    1回答

    我對Haskell有點新鮮,而且我在國家monad方面遇到了一些麻煩。 我已經創建了以下類型。 Stat a有爲它創建的monoid,functor,applicative和monad實例。 「主」式的在我的計劃是動物,它有很多爭論: data Creature = Creature { strength :: Stat Integer, dexterity :: Stat I

    0熱度

    1回答

    在閱讀Functional Programming in Scala的第6章並試圖瞭解國家monad後,我有一個關於包裝副作用課的問題。 說我有一個班級,在某種程度上修改自己。 class SideEffect(x:Int) { var value = x def modifyValue(newValue:Int):Unit = { value = newValue } }

    4熱度

    1回答

    在Haskell中狀態是monad被傳遞來提取和存儲狀態。並且在下面的兩個例子中,兩個都通過使用>>的狀態monad,並且通過函數內聯和縮減來驗證狀態確實傳遞到下一步。 然而這似乎不是很直觀。那麼這是否意味着當我想通過狀態單元時,我只需要>>(或>>=和lambda表達式\s -> a,其中s在a中不是免費的)?任何人都可以爲這個事實提供一個直觀的解釋,而不用擔心減少這個功能嗎? -- the f

    1熱度

    2回答

    我心亂如麻和 和 之間 newtype StateT s m a = StateT {runStateT :: s -> m (a, s)} type State s = StateT s Identity class Monad m => MonadState s m | m -> s

    2熱度

    3回答

    從哈斯克爾功能的思考(第248): 你可以認爲State s a類型爲 type State s a = s -> (a,s) ... put :: s -> State s() get :: State s s state :: (s -> (a,s)) -> State s a ... state可以使用put和來定義: state f = do {s <- get; let (a

    1熱度

    2回答

    雖然試圖瞭解國家的單子和與它使用的鏡頭,我來到一個鏡頭一個簡單的計數器一個令人驚訝的瑣碎定義: self :: ASetter s s s s self = ($) incrementUsingLens :: State Int() incrementUsingLens = self %= (+1) 由於 type ASetter s t a b = (a -> Identity b)

    1熱度

    2回答

    在Haskell退狀態單子,綁定的如下定義被接受: type RState s a = s -> (a, s) bind :: RState s a -> (a -> RState s b) -> RState s b bind sf f = \s -> let (a, s'') = sf s' (b, s') = f a s in (b, s'') 我怎