我現在寫了很多關于使用狀態的函式的練習,比如
addStateAndReturnResult :: Int -> State Int Int
addStateAndReturnResult x = do
state <- get
put $ state x
return $ state x
但我不知道如何實際呼叫該函式并得到結果。這樣的事情給了我一個奇怪的型別錯誤,甚至不接近:
callIt :: Int
callIt = addStateAndReturnResult 3 (State 1)
請問如何使函式運行?
uj5u.com熱心網友回復:
為此有三個功能。
最普遍的是runState :: State s a -> s -> (a, s)。它回傳最后一個狀態和最終回傳值的元組。
然后有evalState :: State s a -> s -> awhich 只是回傳最終的回傳值。
還有execState :: State s a -> s -> s一個只是回傳最后一個狀態值。
在您的情況下,您可能想要evalState:
callIt = evalState (addStateAndReturnResult 3) 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517160.html
標籤:哈斯克尔
下一篇:保留演算法不正常
