在教程Learn You a Haskell - chapter 'for-a-few-monads-more', section 'The State monad',它列出了以下定義國家單子:Haskell State Monad - 對lamba s - > ...的輸入是什麼?
newtype State s a = State { runState :: s -> (a,s) }
instance Monad (State s) where
return x = State $ \s -> (x,s)
(State h) >>= f = State $ \s -> let (a, newState) = h s
(State g) = f a
in g newState
只需要回答一個簡單的問題:你會在輸入\ S是(因爲狀態H =一個函數,一個狀態並輸出一個元組(result,newState);暗示\ s的輸入只是該函數)?歡迎舉例
's'是當前狀態,'State' newtype包裝的函數返回結果和新狀態。 – Lee
但是'現狀'來自哪裏呢?它來自定義的第一行:'Monad(State s)'實例嗎?暗示輸入是's'?需要使用定義本身的冷酷答案。 – SoyTeins
不,還有一個'runState'函數,它使初始狀態和計算運行,例如'runState(return 1)「state」=>(1,「state」)' – Lee