簡體   English   中英

申請人'加入'?

[英]'join' for Applicatives?

我正在尋找以下功能:

Applicative f => f (fa) -> fa

Hoogle讓我join

>:t join
join :: Monad m => m (m a) -> m a

有沒有符合我想要的簽名的功能?

為了擴展卡爾的答案 ,如果有join這樣的事情,但對於應用程序:

class Applicative f => ApplicativeWithJoin f where
    join' :: f (f a) -> f a

然后你會自動擁有一個monad:

instance ApplicativeWithJoin m => Monad m where
    return = pure
    x >>= f = join' (f <$> x)

沒有這樣的功能。 join明確是Applicative缺乏的和Monad擁有的。

擴展SingleNegationElimination的答案:

  • Applicative<*>允許您將效果組合在一起並將它們的值組合在一起,或者使用<$>操作一個值,但是您不能使效果取決於先前計算的值。
  • 另一方面, Monad s允許效果由先前計算的結果確定,如>>=

對於任何Applicative您可以先使用<$>a內部fa類型a值轉換為某個fb ,這樣你就得到f (fb) 但是沒有join ,內部fb只是另一個值,沒有辦法將它與實際執行的外部結合起來。 添加join使其成為可能,允許定義Monad的全部功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM