packages feed

d10-1: src/D10/Predicate.hs

{-# language Safe #-}

-- | Functions to test whether values of various
-- types represent digits in the range /0/ to /9/.
module D10.Predicate where

import Numeric.Natural (Natural)

-- | Determines whether a 'Char' is in the range @'0'@ to @'9'@.
isD10Char :: Char -> Bool
isD10Char x = x >= '0' && x <= '9'

-- | Determines whether a 'String' consists of a single character
-- and that character is within the range @'0'@ to @'9'@.
isD10Str :: String -> Bool
isD10Str [x] = isD10Char x
isD10Str _   = False

-- | Determines whether a 'String' consists entirely of characters
-- that are within the range @'0'@ to @'9'@.
isD10ListStr :: String -> Bool
isD10ListStr = all isD10Char

-- | Determines whether a 'Natural' is in the range 0 to 9.
isD10Nat :: Natural -> Bool
isD10Nat x = x <= 9

-- | Determines whether an 'Integer' is in the range 0 to 9.
isD10Integer :: Integer -> Bool
isD10Integer x = x >= 0 && x <= 9

-- | Determines whether an 'Int' is in the range 0 to 9.
isD10Int :: Int -> Bool
isD10Int x = x >= 0 && x <= 9

-- | Determines whether a number whose type has an 'Integral'
-- instance is in the range 0 to 9.
isD10Integral :: Integral a => a -> Bool
isD10Integral x = isD10Integer (toInteger x)