module Control.CUtils.StrictArrow where import Control.Arrow -- | Arrows that have a strictness effect. class Strict a where force :: a t u -> a t u instance Strict (->) where force f x = x `seq` f x instance (Monad m) => Strict (Kleisli m) where force a = Kleisli (\x -> x `seq` runKleisli a x)