module Fx.Transform
where
import Fx.Prelude
import Fx.EitherEffect.Types
newtype input --> output =
Transform (forall result. input result -> output result)
eitherEffect :: Monad either => (left --> either) -> (right --> either) -> (EitherEffect left right either --> either)
eitherEffect (Transform leftTrans) (Transform rightTrans) =
Transform (\ (EitherEffect context) -> context leftTrans rightTrans)
instance Category (-->) where
id = Transform id
(.) (Transform left) (Transform right) = Transform (left . right)