-- | Natural numbers, either positive or non-zero.  These wrap Int
-- rather than Integers so do not use them were unlimited precision is
-- needed.

module Penny.Lincoln.Natural
  ( NonNegative (unNonNegative)
  , nonNegative
  , Positive (unPositive)
  , positive
  ) where

newtype NonNegative = NonNegative { unNonNegative :: Int }
  deriving (Eq, Show, Ord)

nonNegative :: Int -> Maybe NonNegative
nonNegative i = if i >= 0 then Just (NonNegative i) else Nothing

newtype Positive = Positive { unPositive :: Int }
  deriving (Eq, Show, Ord)

positive :: Int -> Maybe Positive
positive i = if i > 0 then Just (Positive i) else Nothing