Ist die folgende Abstraktion mit Instanzen von Contravariant
, Divisible
und etc. bereits in einem Paket implementiert? Ich impliziere etwas im Geist des folgenden übersetzbar Code:Auf der Suche nach einem Dual von ReaderT, die über die Umgebung statt monadischen Ergebnis abstrahiert
newtype ReaderDual a m b =
ReaderDual (b -> m a)
instance Contravariant (ReaderDual a m) where
contramap ba (ReaderDual a') =
ReaderDual $ a' . ba
instance (Applicative m, Monoid a) => Divisible (ReaderDual a m) where
divide aToBC (ReaderDual b') (ReaderDual c') =
ReaderDual $ \a -> aToBC a & \(b, c) -> (<>) <$> b' b <*> c' c
conquer =
ReaderDual $ \_ -> pure mempty
run :: ReaderDual a m b -> b -> m a
run (ReaderDual a') b =
a' b