【发布时间】:2019-03-02 13:28:20
【问题描述】:
有点类似于this question,我想弄清楚
如何在 Haskell Monad 状态下移动。
团队中的每个Employee 都替换为对应的Employee'
同时保持一些简单的状态。代码如下:
module Main( main ) where
import Control.Monad.State
data Employee = EmployeeSW Int Int | EmployeeHW Int String deriving ( Show )
data Employee' = EmployeeSW' Int | EmployeeHW' String deriving ( Show )
scanTeam :: [Employee] -> State (Int,Int) [Employee']
scanTeam [ ] = return []
scanTeam (p:ps) = scanEmployee p -- : scanTeam ps ???
scanEmployee :: Employee -> State (Int,Int) Employee'
scanEmployee (EmployeeSW id s) = do
(num,raise) <- get
put (num+1,raise)
return (EmployeeSW' (s+raise))
scanEmployee (EmployeeHW id s) = do
(num,raise) <- get
put (num+1,raise)
return (EmployeeHW' (s++(show raise)))
startState = (0,3000)
t = [(EmployeeHW 77 "Hundred"),(EmployeeSW 66 500),(EmployeeSW 32 200)]
main = print $ evalState (scanTeam t) startState
我想最终将scanEmployee p 与scanTeam ps 连接起来,
所以我试图提取scanEmployee p 的碎片并以某种方式粘合
他们和scanTeam ps一起。到目前为止,我失败得很惨。
实际上,我什至不确定状态是否可以在它们之间移动(?)。
【问题讨论】: