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)