【发布时间】:2016-06-13 16:52:40
【问题描述】:
假设我有type X[A] = A => Option[A] 并且需要这样的功能:
def repeat[A](xa: X[A], n: Int): X[A] // call xa n times
def many[A](xa: X[A]): X[A] // call xa until it returns None
scalaz(或任何其他库)是否提供此类功能?
附:正如在 cmets 中提到的,many 函数只对副作用有用,所以它不是一个很好的例子。
【问题讨论】:
-
不确定,因为
Scalaz更喜欢使用纯函数,所以repeat/many没有任何意义 -
@dk14 当然,
many只能用于它的副作用,但repeat有完全合理的纯用例。 -
@dk14 和 Travis,
many是对的。我可能需要smth。喜欢until[A](xa: X[A], pred: A => Boolean): X[A]调用xa直到pred为真 -
@TravisBrown 仅当它被提升到
Kleisli之类的东西时(或使用某种免费的单子),无论如何 +1 给你的答案 -
@dk14 我的理解是,在
repeat中,该函数将在先前的结果上迭代调用,在这种情况下,它完全是有意义的。
标签: scala scalaz combinators