module Data.Ord.HT where

import Data.Function.HT (compose2, )

{-# INLINE comparing #-}
comparing :: Ord b => (a -> b) -> a -> a -> Ordering
comparing = compose2 compare

{- |
@limit (lower,upper) x@ restricts @x@ to the range from @lower@ to @upper@.
Don't expect a sensible result for @lower>upper@.
-}
{-# INLINE limit #-}
limit :: (Ord a) => (a,a) -> a -> a
limit (l,u) = max l . min u

{- |
@limit (lower,upper) x@ checks whether @x@ is in the range from @lower@ to @upper@.
Don't expect a sensible result for @lower>upper@.
-}
{-# INLINE inRange #-}
inRange :: (Ord a) => (a,a) -> a -> Bool
inRange (l,u) x  =  l<=x && x<=u