这是我第二次解决这个问题... 这是第二次在与Statemonad 一起工作时,显然一个州喜欢由许多领域组成,而不仅仅是一个领域
我有一个元组:
type CurrentState = (Int, Int, String, [Int], CustType1, CustType2, CustType3 )
Run Code Online (Sandbox Code Playgroud)
假设需要对该元组进行简单的转换...第二个Int是一种计数器,它需要增加:
let incrementCounter currState@(foo, bar, baz, fizz, buzz, blah, yadda) =
( foo, bar+1, baz, fizz, buzz, blah, yadda )
Run Code Online (Sandbox Code Playgroud)
哇。很多打字。现在,既然增加计数器并不是该元组的唯一可能操作,那么显然会有更多此类功能……混乱很快就会变得令人讨厌。
如果我们将元组更改为记录怎么办?
data CurrentState = CurrentState { foo :: Int, bar :: Int, baz :: String,
fizz :: [Int], buzz :: CustType1,
blah :: CustType2, yadda :: CustType 3 }
Run Code Online (Sandbox Code Playgroud)
现在增加计数器就更糟了!
let incrementCounter currState =
CurrentState { foo = foo currState, …Run Code Online (Sandbox Code Playgroud)