【问题标题】:Get result and state instead of just state from State Monad从 State Monad 获取结果和状态,而不仅仅是状态
【发布时间】: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


【解决方案1】:

你可以这样做:

foo = do
    x <- do
        put 5
        return 'X'
    five <- get
    {- ... whatever you want ... -}

在whatever you want 中,变量x 将为'X',变量five 将为5。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2019-07-04
    • 2021-03-11
    相关资源
    最近更新 更多