Conal Elliott在这里谈论流和Comonads:http://conal.net/blog/posts/sequences-streams-and-segments
但是,他没有直接提及“行为”。所以..行为是Comonad吗?如果是的话-这实际上意味着什么?
对于初学者-我想行为可以提供extend
和extract
函数。我看到工作的唯一方法是是否在特定时间对值进行采样。
Comonad对行为意味着什么吗?允许人们“分叉并冻结”行为吗?
换句话说-如果我们有一个行为随着时间的推移具有这些值:A,B,C,D,...
我们可以在extend
时B
并获得一个新的行为,该行为包含B
无限期(这很有用-因为我们可以随后lift
或map
等)
答案 0 :(得分:3)
Behavior a
与(Time -> a)
同构。 Conal在该帖子的“添加连续性”部分中给出的定义与comonad package中的定义相匹配。
对我而言,如何使时间成为单身生物并不明显。可能有几个Monoid实例,但有用吗?康纳在future values上的帖子建议Max
是一个有用的Monoid,可以用来处理时间。
这表明extract @Behavior
在最早的时间给出值,而duplicate @Behavior
在两次的较晚时间给出值。我看到这两个都是有用的。也许还有其他有用的Monoid吗?