Is the following abstraction with instances of Contravariant , Divisible , etc. already implemented in some package? I mean something in the spirit of the following compiled code:
newtype ReaderDual amb = ReaderDual (b -> ma) instance Contravariant (ReaderDual am) where contramap ba (ReaderDual a') = ReaderDual $ a' . ba instance (Applicative m, Monoid a) => Divisible (ReaderDual am) where divide aToBC (ReaderDual b') (ReaderDual c') = ReaderDual $ \a -> aToBC a & \(b, c) -> (<>) <$> b' b <*> c' c conquer = ReaderDual $ \_ -> pure mempty run :: ReaderDual amb -> b -> ma run (ReaderDual a') b = a' b
haskell
Nikita Volkov
source share