packages feed

proton-0.0.2: src/Data/Profunctor/FoldM.hs

{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE GADTs #-}
module Data.Profunctor.FoldM where
import Data.Profunctor

-- https://hackage.haskell.org/package/foldl-1.4.10/docs/Control-Foldl.html#t:FoldM
data FoldM m a b = forall x. FoldM (x -> a -> m x) (m x) (x -> m b)

instance Functor m => Profunctor (FoldM m) where
  dimap l r (FoldM step initial extract) = FoldM (\x a -> step x (l a)) initial (fmap r . extract)

-- instance Choice (FoldM m) where
--   right' (FoldM step initial extract) = FoldM (\x a -> )
--   where
--     step' x (Left l) 
--     step' x (Right)