우리가 KleisliFunctor
를 정의 할 수 있습니다 방법입니다KleisliFunctor와 비슷한 점은 무엇입니까? 여기
class (Monad m, Functor f) => KleisliFunctor m f where
kmap :: (a -> m b) -> f a -> f b
kmap f = kjoin . fmap f
kjoin :: f (m a) -> f a
kjoin = kmap id
합니까
class (Functor f, Monad m) => Absorb f m where
(>>~) :: f a -> (a -> m b) -> m b
a >>~ f = ajoin $ fmap f a
ajoin :: f (m a) -> m a
ajoin a = a >>~ id
적합 어딘가에 카테고리 이론으로 이러한 유형의 클래스? 법은 무엇입니까? 그들은 있습니까
a >>~ g . f === fmap f a >>~ g
a >>~ (f >=> g) === a >>~ f >>= g
?
'Absorb' 인스턴스는 허용하지만 충분히 강력한 표준 인스턴스는'(>> ~)'와'ajoin'을 구현할 수있는 특정 예제 유형이 있습니까? – leftaroundabout
@leftaround에 대해서는,'f' 펑터에 누적기를 유지하면서 결과를'm' 모나드로 반환 할 수있는 일반화 된 모다 딩 접기를 구현하려면'Absorb'가 필요합니다. 예 : [this] (https://github.com/effectfully/prefolds/blob/374257b12f9a2af752862addafe456cded9c0efb/test/Main.hs#L297). – user3237465