我發現很多東西我對我自己的一起卷染,似乎在所有有用實際上有一個標準的實施,我只是不知道,所以很好奇,如果任何人都可以說,他們已經看到了這種類型的事情之前使用:Haskell函數是否已知/實現爲另一個名稱?
它需要一個一元函數,並把它摺疊,直到斷言被替代選擇則返回謂詞的結果:
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
我認識的名字是一個前奏碰撞,我可能會把它命名爲別的東西,但是我認爲我會先看看在標準庫中是否有類似的功能,我只是不知道。
此外,我想我很好奇,如果我寫的成分替代在其他地方定義,或者如果任何此位的功能似乎誤導開始說起。但我的問題的癥結是,這是在其他地方實施的或者非常類似的東西在其他地方實施或許
您可能需要使用'MonadPlus'而不是合併'Monad'和'Alternative'約束。 – 2013-03-06 05:10:55
@pelotom你可以用MonadPlus來定義Alternative嗎?我不知道,我只是把我的簽名直接從GHCI – 2013-03-06 05:19:54
他們定義不同的API,但執行類似的角色...'Alternative':'Applicative' ::'MonadPlus':'Monad'。 – 2013-03-06 05:47:17