我正在尝试为某种流事件发送器提供功能API。举例来说,您有一堆嵌套的动画或(更一般而言)动作。动作形成一棵树。您希望能够监听全局开始和停止的动作,还可以从树中的任何位置暂停/取消/恢复动作。
seq(
doa(),
dob(),
seq(
dox(),
doy(),
doz()
),
doc()
)
因此,在像JavaScript这样的传统编程中,您可以这样做:
var stream = seq(
doa(),
dob(),
seq(
dox(),
doy(),
doz()
),
doc()
)
stream.on('startEntireProcess', console.log)
stream.on('startChildAction', console.log)
stream.on('endChildAction', console.log)
stream.on('endEntireProcess', console.log)
但是在函数式编程中,我不确定您会做什么。
iterate(
seq(
doa(),
dob(),
seq(
dox(),
doy(),
doz()
),
doc()
)
)
function iterate(actions) {
while (next action) {
action() ... I am lost
}
}
然后最重要的是,添加取消和继续等!我看不到不添加某种状态并具有副作用的方法。
想知道是否可以解释API在这种情况下的功能范式。