multiclamp5 :: Ord a => a -> a -> a -> Maybe a multiclamp5 lim1 lim2 = Kleisli (clamp lim1) >>> Kleisli (clamp lim2)
multiclamp = clamp >=> return clamp
allclamp lims x = foldM (flip clamp) x lims
(>=>) :: (Monad m) => (a -> m b) -> (b -> m c) -> (a -> m c) (>=>) c1 c2 a = (c1 a) >>= c2