-----------------------------------------------------------------------------
--
-- Module      :  Data.Default.Util
-- Copyright   :  (c) 2014-16 Brian W Bush
-- License     :  MIT
--
-- Maintainer  :  Brian W Bush <consult@brianwbush.info>
-- Stability   :  Stable
-- Portability :  Portable
--
-- | Default numeric values.
--
-----------------------------------------------------------------------------


{-# LANGUAGE Safe #-}


module Data.Default.Util (
-- * Classes
  Zero(..)
-- * Values
, nan
, inf
, infNegative
) where


-- | Class for zero values.
class Zero a where
  -- | The zero value.
  zero :: a


-- | Not a number.
nan :: RealFloat a => a
nan = realToFrac (read "NaN" :: Double)


-- | Positive infinity.
inf :: RealFloat a => a
inf = realToFrac (read "Infinity" :: Double)


-- | Negative infinity.
infNegative :: RealFloat a => a
infNegative = realToFrac (read "-Infinity" :: Double)