diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,12 @@
 # Revision history for input-parsers
 
+## 0.2.1 -- 2021-03-09
+
+* Changed the default instance of `ParserPosition`, made `Position` a subclass of `Ord`.
+
 ## 0.2 -- 2021-03-07
 
-* Added `ParserPosition` and made `Position` a class.
+* Added `ParserPosition` and made `Position` a class. Deprecated.
 
 ## 0.1.0.1 -- 2020-07-19
 
diff --git a/input-parsers.cabal b/input-parsers.cabal
--- a/input-parsers.cabal
+++ b/input-parsers.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                input-parsers
-version:             0.2
+version:             0.2.1
 synopsis:            Extension of the parsers library with more capability and efficiency
 description:
                      Extended version of the parsers library, with the additional classes providing more
diff --git a/src/Text/Parser/Input.hs b/src/Text/Parser/Input.hs
--- a/src/Text/Parser/Input.hs
+++ b/src/Text/Parser/Input.hs
@@ -27,7 +27,8 @@
 import qualified Control.Monad.Trans.RWS.Strict as Strict (RWST(RWST))
 import Data.Functor ((<$>))
 import qualified Data.List as List
-import Data.Monoid (Monoid, Dual, mappend, mempty)
+import Data.Ord (Down)
+import Data.Monoid (Monoid, mappend, mempty)
 import Data.String (IsString (fromString))
 import Text.ParserCombinators.ReadP (ReadP)
 import qualified Text.ParserCombinators.ReadP as ReadP
@@ -122,8 +123,8 @@
    -- version of 'concat' @.@ 'Control.Applicative.some' @.@ 'satisfy'.
    takeWhile1 :: (ParserInput m -> Bool) -> m (ParserInput m)
 
-   type ParserPosition m = Dual Int
-   default getSourcePos :: (FactorialMonoid (ParserInput m), Functor m, ParserPosition m ~ Dual Int)
+   type ParserPosition m = Down Int
+   default getSourcePos :: (FactorialMonoid (ParserInput m), Functor m, ParserPosition m ~ Down Int)
                         => m (ParserPosition m)
    getSourcePos = fromEnd . Factorial.length <$> getInput
    anyToken = take 1
diff --git a/src/Text/Parser/Input/Position.hs b/src/Text/Parser/Input/Position.hs
--- a/src/Text/Parser/Input/Position.hs
+++ b/src/Text/Parser/Input/Position.hs
@@ -7,16 +7,17 @@
 
 import Data.Char (isSpace)
 import Data.String (IsString(fromString))
-import Data.Monoid (Dual(Dual))
+import Data.Ord (Down(Down))
 import qualified Data.Monoid.Factorial as Factorial
 import qualified Data.Monoid.Textual as Textual
 import Data.Monoid.Factorial (FactorialMonoid)
 import Data.Monoid.Textual (TextualMonoid)
 
--- | A class for representing position values.
+-- | A class for representing position values. The methods satisfy these laws:
 --
 -- > move (distance pos1 pos2) pos1 == pos2
-class Position p where
+-- > (pos1 < pos2) == (distance pos1 pos2 > 0)
+class Ord p => Position p where
    -- | Distance from the first position to the second
    distance :: p -> p -> Int
    -- | Move the position by the given distance.
@@ -29,18 +30,18 @@
    move = (+)
    offset = const id
 
-instance Position a => Position (Dual a) where
-   distance (Dual p1) (Dual p2) = distance p2 p1
-   move distance (Dual p) = Dual (move (negate distance) p)
-   offset wholeInput (Dual p) = Factorial.length wholeInput - offset wholeInput p
+instance Position a => Position (Down a) where
+   distance (Down p1) (Down p2) = distance p2 p1
+   move distance (Down p) = Down (move (negate distance) p)
+   offset wholeInput (Down p) = Factorial.length wholeInput - offset wholeInput p
 
 -- | Construct a 'Position' given the offset from the beginning of the full input.
 fromStart :: Int -> Int
 fromStart = id
 
 -- | Construct a 'Position' given the length remaining from the position to the end of the input.
-fromEnd :: Int -> Dual Int
-fromEnd = Dual
+fromEnd :: Int -> Down Int
+fromEnd = Down
 
 -- | Given the parser input, a 'Position' within it, and desired number of context lines, returns a description of
 -- the offset position in English.
