2
我想實現把與修改哈斯克爾MonadState工具把與修改
put :: s -> m()
modify :: (s -> s) m s
當我這樣做
put s = modify $ const((), s)
我得到的錯誤,
預期類型:M()
實際類型:m((),s)
我試過類似的東西
modify $ const((), s) >>= \x -> return (fst x)
獲得預期的M型()
但這種方法行不通
可能有人向我解釋如何通過使用修改工具放?
謝謝你的時間和幫助。
感謝您的回覆, 我應該如何使用put和get來實現修改。 你的put實現似乎不適用於我的修改實現。 我執行的修改是修改f = do {x < - get; put(f x)} – BARJ
你的'modify'的實現是正確的,但它是通過'get'和'put'完成的。所以如果你試圖用'modify'實現'put',它就變成了循環。你正在實現一個特定的狀態monad的方法,還是你正在試圖編寫一般的實現? – duplode
@Neckronis我更新了答案,以使這一點更清晰。它有幫助嗎? – duplode