{-# LANGUAGE Safe #-} {-| Module : Data.Char.Number.Segmented Description : A module used to render segmented numbers. Maintainer : hapytexeu+gh@gmail.com Stability : experimental Portability : POSIX The <https://www.unicode.org/charts/PDF/U1FB00.pdf 1FB00 Unicode block> contains symbols for legacy computing and among them segmented digits: 🯰🯲🯳🯴🯵🯶🯷🯸🯹 -} module Data.Char.Number.Segmented ( -- * Convert numbers to a seven-segmented display segmentedDigit, segmentedDigit' ) where import Data.Char(chr) _segmentedDigit :: Int -> Char _segmentedDigit :: Int -> Char _segmentedDigit Int n | Int 0 forall a. Ord a => a -> a -> Bool <= Int n Bool -> Bool -> Bool && Int n forall a. Ord a => a -> a -> Bool <= Int 9 = Int -> Char chr (Int 0x1fbf0 forall a. Num a => a -> a -> a + Int n) | Bool otherwise = Char '\xfffd' -- | Convert the given 'Integral' number to its Unicode character. In case the -- value is less than @0@, or greater than @9@, the behavior is unspecified. segmentedDigit' :: Integral i => i -- ^ The given number to convert. -> Char -- ^ A Unicode character that represents this digit. segmentedDigit' :: forall i. Integral i => i -> Char segmentedDigit' = Int -> Char _segmentedDigit forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a b. (Integral a, Num b) => a -> b fromIntegral -- | Convert the given 'Integral' number to its Unicode character wrapped in a -- 'Just' data constructor. In case the value is less than @0@ or greater than -- @9@, 'Nothing' is returned. segmentedDigit :: Integral i => i -- ^ The given number to convert. -> Maybe Char -- ^ A Unicode character that represents the given digit on a /seven-segment display/ wrapped in a 'Just' data constructor. If the number is outside the @0-9@ range, then 'Nothing' is returned. segmentedDigit :: forall i. Integral i => i -> Maybe Char segmentedDigit i n | i n forall a. Ord a => a -> a -> Bool >= i 0 Bool -> Bool -> Bool && i n forall a. Ord a => a -> a -> Bool <= i 9 = forall a. a -> Maybe a Just (forall i. Integral i => i -> Char segmentedDigit' i n) | Bool otherwise = forall a. Maybe a Nothing