我发现很多我自己拼凑起来的东西似乎很有用,实际上有一个我不知道的标准实现,所以很好奇是否有人可以说他们以前见过这种类型的东西:
它接受一个单子函数并将其折叠,直到一个谓词被替代选择,然后它返回谓词的结果:
until :: (Monad m, Alternative m) => (a -> m a) -> (a -> m c) -> a -> m c
f `until` p = \a -> (f >=> (p `altF` (until f p))) a
where f1 `altF` f2 = \a -> f1 a <|> f2 a
我意识到这个名字是一个前奏冲突,我可能会用别的名字来命名它,但我想我会先看看在我不知道的标准库中是否已经有类似的功能......
此外,我想我很好奇我写的组合替代方案是否在其他地方定义,或者这些功能中的任何一个似乎一开始就被误导了。但我的问题的症结是,这是在其他地方实现的,还是在其他地方实现的非常相似的东西