2014-09-26 67 views
9

在Hackage中是否有類似於MonadIO的類型類別,但對於Applicative s,允許人們輕鬆地將IO動作擡升爲"applicative composition stacks",基於IO是否有「ApplicativeIO」類?

如果這種類型類存在,它會由Applicative-Monad Proposal的實施作出過時了嗎?該提案是否涉及對MonadIOMonad限制的放寬?

+1

我覺得放鬆'Monad'約束是值得考慮的。 – 2014-09-26 17:58:32

+3

如果人們想知道,法律將是'liftAIO(純r)=純r'和'liftAIO(f <*> x)= liftAIO f <*> liftAIO x' – 2014-09-26 20:15:10

+0

我想問題的答案是「在Hackage a中的某處類似於MonadIO但類似於應用程序?是「否」(至少我找不到任何東西),但這並不意味着@GabrielGonzalez在某個時候不會寫關於它的博客文章。 – bheklilr 2014-09-26 21:53:46

回答

4

a related discussion on haskell-cafe一年前。在Reddit comments我給an example從IO自然變換(g)到另一個單子是一個適用函子射(即,滿足加布裏埃爾·岡薩雷斯提到的法律),但不是一個單子射(它不符合有關的附加法到>>=)。所以,即使在與AMP,世界ApplicativeIO mMonadIO m真的是不同的東西,即使mMonad

在一個理想的世界裏,你就會有這樣的設置:

class Functor f => FunctorIO f where 
    liftIO :: IO a -> f a 
    -- such that liftIO is a natural transformation (automatic, by parametricity) 

class (Applicative f, FunctorIO f) => ApplicativeIO f where 
    -- ... and liftIO is an applicative functor morphism 

class (Monad f, ApplicativeIO f) => MonadIO f where 
    -- ... and liftIO is a monad morphism 

而神奇的仙女將準確界定ApplicativeIOMonadIO情況下,當相應的法律感到滿意。