【发布时间】:2020-06-01 13:21:56
【问题描述】:
我有这个代码:
runState (do { put 5; return 'X' }) 1,效果为:('X',5)。我想在 do 块中提取结果 - 'X' 和当前状态 - 5,然后对它们做一些事情。但是,当我使用get 函数时,例如:z <- get,它会将结果设置为当前状态,从而破坏值5。我怎样才能做到这一点?
【问题讨论】:
-
5是 monadic 函数的“结果”,因此您需要在此之前将其捕获,这不是“存储”在某处。 -
我怎样才能抓住它?
-
您能否显示未按预期方式运行的代码?
-
就像
result <- stateMonad,所以stateMonad“返回”一个结果(单位类型()在它不返回某些东西时使用(有意义的))。 -
你想要
runState (do { put 5; let result = 'X'; currState <- get; somefuncM currState result; return result}) 1这样的东西吗?从你的片段中看不太清楚。你能提供一个更好的例子吗?
标签: haskell monads state-monad