module Language.Fluent.Width where
import Data.Char (toLower)
import Prelude
data Width
=
Narrow
|
Short
|
Long
deriving stock (Width -> Width -> Bool
(Width -> Width -> Bool) -> (Width -> Width -> Bool) -> Eq Width
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Width -> Width -> Bool
== :: Width -> Width -> Bool
$c/= :: Width -> Width -> Bool
/= :: Width -> Width -> Bool
Eq, Width
Width -> Width -> Bounded Width
forall a. a -> a -> Bounded a
$cminBound :: Width
minBound :: Width
$cmaxBound :: Width
maxBound :: Width
Bounded, Int -> Width
Width -> Int
Width -> [Width]
Width -> Width
Width -> Width -> [Width]
Width -> Width -> Width -> [Width]
(Width -> Width)
-> (Width -> Width)
-> (Int -> Width)
-> (Width -> Int)
-> (Width -> [Width])
-> (Width -> Width -> [Width])
-> (Width -> Width -> [Width])
-> (Width -> Width -> Width -> [Width])
-> Enum Width
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Width -> Width
succ :: Width -> Width
$cpred :: Width -> Width
pred :: Width -> Width
$ctoEnum :: Int -> Width
toEnum :: Int -> Width
$cfromEnum :: Width -> Int
fromEnum :: Width -> Int
$cenumFrom :: Width -> [Width]
enumFrom :: Width -> [Width]
$cenumFromThen :: Width -> Width -> [Width]
enumFromThen :: Width -> Width -> [Width]
$cenumFromTo :: Width -> Width -> [Width]
enumFromTo :: Width -> Width -> [Width]
$cenumFromThenTo :: Width -> Width -> Width -> [Width]
enumFromThenTo :: Width -> Width -> Width -> [Width]
Enum)
instance Show Width where
show :: Width -> [Char]
show Width
Narrow = [Char]
"narrow"
show Width
Short = [Char]
"short"
show Width
Long = [Char]
"long"
instance Read Width where
readsPrec :: Int -> ReadS Width
readsPrec Int
_ [Char]
s = [(Width
it, [Char]
"") | Width
it <- [Width
forall a. Bounded a => a
minBound .. Width
forall a. Bounded a => a
maxBound], (Char -> Char) -> [Char] -> [Char]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toLower (Width -> [Char]
forall a. Show a => a -> [Char]
show Width
it) [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== (Char -> Char) -> [Char] -> [Char]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toLower [Char]
s]
letters :: Width -> Int
letters :: Width -> Int
letters Width
Short = Int
3
letters Width
Long = Int
4
letters Width
Narrow = Int
5