module Proton.Miso where import Data.Profunctor data Miso m a b s t = Miso (s -> m a) (b -> m t) instance Functor m => Profunctor (Miso m a b) where dimap :: (a -> b) -> (c -> d) -> Miso m a b b c -> Miso m a b a d dimap l :: a -> b l r :: c -> d r (Miso sma :: b -> m a sma bmt :: b -> m c bmt) = (a -> m a) -> (b -> m d) -> Miso m a b a d forall (m :: * -> *) a b s t. (s -> m a) -> (b -> m t) -> Miso m a b s t Miso (b -> m a sma (b -> m a) -> (a -> b) -> a -> m a forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> b l) ((c -> d) -> m c -> m d forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap c -> d r (m c -> m d) -> (b -> m c) -> b -> m d forall b c a. (b -> c) -> (a -> b) -> a -> c . b -> m c bmt)