纯函数式状态编程:从随机数生成到状态机实现
1. 通用状态动作数据类型
之前编写的函数,如 unit 、 map 、 map2 、 flatMap 和 sequence ,并非专门用于随机数生成,而是处理状态动作的通用函数,不依赖于具体的状态类型。以 map 为例,它可以有更通用的签名:
def map[S, A, B](action: S => (A, S))(f: A => B): S => (B, S)
修改签名无需改变 map 的实现,通用函数一直存在,只是之前未被发现。
为了处理任意类型的状态,引入比 Rand 更通用的类型 State :
type State[S, +A] = S => (A, S)
State 表示携带状态的计算、状态动作、状态转换或语句。可以用以下两种方式定义:
1.1 用 case class 封装
case class State[S, +A](run: S => (A, S
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



