2014-09-26 2 views
9

Hackage에 MonadIO과 유사한 typeclass가 있지만 작업을 IO을 기반으로 쉽게 IO 개의 작업을 쉽게 들어 올릴 수 있습니다. Applicative의 경우?"ApplicativeIO"클래스가 있습니까?

그런 typeclass가 존재하는 경우 Applicative-Monad Proposal의 구현으로 사용되지 않습니까? 제안에 에 대한 Monad 제약 조건의 완화가 포함되어 있습니까?

+1

'Monad' 제약을 완화하는 것이 고려해 볼 가치가 있다고 생각합니다. –

+3

사람들이 궁금해하는 경우 법칙은 'liftAIO (순수한 r) = 순수한 r'이고 ​​'liftAIO (f <*> x) = liftAIO f <*> liftAIO x' –

+0

나는 대답은 "Hackage a 어딘가에 있습니까? MonadIO와 유사하지만 응용 프로그램에 대한 typeclass? " "아니오"(적어도 아무것도 찾을 수는 없었 음). 그러나 이것이 @GabrielGonzalez이 어느 시점에서 블로그 게시물을 작성하지 않는다는 의미는 아닙니다. – bheklilr

답변

4

년 전에 a related discussion on haskell-cafe이있었습니다. Reddit comments에서 나는 응용 펑터 모프 즘 (즉, Gabriel Gonzalez이 언급 한 법칙을 만족함)이지만 모나드 모프 즘이 아닌 다른 모나드에서 자연 변환 (g)의 자연 변형 (g)을 an example으로 보냈습니다 ~ >>=). 따라서 AMP가 적용된 세계에서도 과 MonadIO mmMonad 인 경우와 전혀 다른 모습입니다.

이상적인 세계에서는이 같은 설정 거라고 :

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 인스턴스를 정의하는 것입니다.