dunai-0.5: src/Data/MonadicStreamFunction/Instances/ArrowChoice.hs
{-# LANGUAGE InstanceSigs #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Instance of 'ArrowChoice' for Monadic Stream Functions ('MSF').
--
-- Import this module to include that (orphan) instance.
module Data.MonadicStreamFunction.Instances.ArrowChoice where
import Control.Arrow
import Data.MonadicStreamFunction.Core
import Data.MonadicStreamFunction.InternalCore
-- | 'ArrowChoice' instance for MSFs.
instance Monad m => ArrowChoice (MSF m) where
left :: MSF m a b -> MSF m (Either a c) (Either b c)
left sf = MSF f
where
f (Left a) = do (b, sf') <- unMSF sf a
return (Left b, left sf')
f (Right c) = return (Right c, left sf)