{-# LANGUAGE RankNTypes #-}
module Data.Fmt.Kan (
fmtDay,
module Data.Functor.Kan,
) where
import Data.Fmt.Type (Fmt (..))
import Data.Functor.Day (Day (..))
import Data.Functor.Kan
fmtDay
:: Semigroup m
=> Fmt m m m
-> Fmt m m m
-> Day ((->) m) ((->) m) m
fmtDay :: forall m.
Semigroup m =>
Fmt m m m -> Fmt m m m -> Day ((->) m) ((->) m) m
fmtDay (Fmt (m -> m) -> m
f) (Fmt (m -> m) -> m
g) = (m -> m) -> (m -> m) -> (m -> m -> m) -> Day ((->) m) ((->) m) m
forall (f :: * -> *) (g :: * -> *) a b c.
f b -> g c -> (b -> c -> a) -> Day f g a
Day (\m
m -> (m -> m) -> m
f (m -> m -> m
forall a. Semigroup a => a -> a -> a
<> m
m)) (\m
m -> (m -> m) -> m
g (m -> m -> m
forall a. Semigroup a => a -> a -> a
<> m
m)) m -> m -> m
forall a. Semigroup a => a -> a -> a
(<>)