diff --git a/intervals.cabal b/intervals.cabal
--- a/intervals.cabal
+++ b/intervals.cabal
@@ -1,5 +1,5 @@
 name:              intervals
-version:           0.5
+version:           0.5.1
 synopsis:          Interval Arithmetic
 description:
   A 'Numeric.Interval.Interval' is a closed, convex set of floating point values.
diff --git a/src/Numeric/Interval.hs b/src/Numeric/Interval.hs
--- a/src/Numeric/Interval.hs
+++ b/src/Numeric/Interval.hs
@@ -12,6 +12,7 @@
 module Numeric.Interval
   ( Interval
   , (...)
+  , interval
   , whole
   , empty
   , null
diff --git a/src/Numeric/Interval/Internal.hs b/src/Numeric/Interval/Internal.hs
--- a/src/Numeric/Interval/Internal.hs
+++ b/src/Numeric/Interval/Internal.hs
@@ -20,6 +20,7 @@
 module Numeric.Interval.Internal
   ( Interval(..)
   , (...)
+  , interval
   , whole
   , empty
   , null
@@ -81,6 +82,12 @@
 posInfinity :: Fractional a => a
 posInfinity = 1/0
 {-# INLINE posInfinity #-}
+
+interval :: Ord a => a -> a -> Maybe (Interval a)
+interval a b
+  | a <= b = Just $ I a b
+  | otherwise = Nothing
+{-# INLINE interval #-}
 
 nan :: Fractional a => a
 nan = 0/0
diff --git a/src/Numeric/Interval/Kaucher.hs b/src/Numeric/Interval/Kaucher.hs
--- a/src/Numeric/Interval/Kaucher.hs
+++ b/src/Numeric/Interval/Kaucher.hs
@@ -20,6 +20,7 @@
 module Numeric.Interval.Kaucher
   ( Interval(..)
   , (...)
+  , interval
   , whole
   , empty
   , null
@@ -118,9 +119,17 @@
   q = realToFrac (truncate $ a / b :: Integer)
 {-# INLINE fmod #-}
 
+-- | Create a directed interval.
 (...) :: a -> a -> Interval a
 (...) = I
 {-# INLINE (...) #-}
+
+-- | Try to create a non-empty interval.
+interval :: Ord a => a -> a -> Maybe (Interval a)
+interval a b
+  | a <= b = Just $ I a b
+  | otherwise = Nothing
+
 
 -- | The whole real number line
 --
diff --git a/src/Numeric/Interval/NonEmpty.hs b/src/Numeric/Interval/NonEmpty.hs
--- a/src/Numeric/Interval/NonEmpty.hs
+++ b/src/Numeric/Interval/NonEmpty.hs
@@ -20,6 +20,7 @@
 module Numeric.Interval.NonEmpty
   ( Interval
   , (...)
+  , interval
   , whole
   , singleton
   , elem
diff --git a/src/Numeric/Interval/NonEmpty/Internal.hs b/src/Numeric/Interval/NonEmpty/Internal.hs
--- a/src/Numeric/Interval/NonEmpty/Internal.hs
+++ b/src/Numeric/Interval/NonEmpty/Internal.hs
@@ -19,6 +19,7 @@
 module Numeric.Interval.NonEmpty.Internal
   ( Interval(..)
   , (...)
+  , interval
   , whole
   , singleton
   , elem
@@ -84,11 +85,19 @@
   q = realToFrac (truncate $ a / b :: Integer)
 {-# INLINE fmod #-}
 
+-- | Create a non-empty interval, turning it around if necessary
 (...) :: Ord a => a -> a -> Interval a
 a ... b
   | a <= b = I a b
   | otherwise = I b a
 {-# INLINE (...) #-}
+
+-- | Try to create a non-empty interval.
+interval :: Ord a => a -> a -> Maybe (Interval a)
+interval a b
+  | a <= b = Just $ I a b
+  | otherwise = Nothing
+
 
 -- | The whole real number line
 --
