{-# LANGUAGE DerivingStrategies #-}

module Taiwan.ID.CharSet
  ( CharSet (..)
  )
  where

import Data.Set.NonEmpty
  ( NESet )

-- | Specifies a set of characters.
--
data CharSet
  = CharSet (NESet Char)
  -- ^ An explicit set of characters.
  | CharRange Char Char
  -- ^ An inclusive range of characters.
  deriving stock (CharSet -> CharSet -> Bool
(CharSet -> CharSet -> Bool)
-> (CharSet -> CharSet -> Bool) -> Eq CharSet
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CharSet -> CharSet -> Bool
== :: CharSet -> CharSet -> Bool
$c/= :: CharSet -> CharSet -> Bool
/= :: CharSet -> CharSet -> Bool
Eq, Eq CharSet
Eq CharSet =>
(CharSet -> CharSet -> Ordering)
-> (CharSet -> CharSet -> Bool)
-> (CharSet -> CharSet -> Bool)
-> (CharSet -> CharSet -> Bool)
-> (CharSet -> CharSet -> Bool)
-> (CharSet -> CharSet -> CharSet)
-> (CharSet -> CharSet -> CharSet)
-> Ord CharSet
CharSet -> CharSet -> Bool
CharSet -> CharSet -> Ordering
CharSet -> CharSet -> CharSet
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CharSet -> CharSet -> Ordering
compare :: CharSet -> CharSet -> Ordering
$c< :: CharSet -> CharSet -> Bool
< :: CharSet -> CharSet -> Bool
$c<= :: CharSet -> CharSet -> Bool
<= :: CharSet -> CharSet -> Bool
$c> :: CharSet -> CharSet -> Bool
> :: CharSet -> CharSet -> Bool
$c>= :: CharSet -> CharSet -> Bool
>= :: CharSet -> CharSet -> Bool
$cmax :: CharSet -> CharSet -> CharSet
max :: CharSet -> CharSet -> CharSet
$cmin :: CharSet -> CharSet -> CharSet
min :: CharSet -> CharSet -> CharSet
Ord, ReadPrec [CharSet]
ReadPrec CharSet
Int -> ReadS CharSet
ReadS [CharSet]
(Int -> ReadS CharSet)
-> ReadS [CharSet]
-> ReadPrec CharSet
-> ReadPrec [CharSet]
-> Read CharSet
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS CharSet
readsPrec :: Int -> ReadS CharSet
$creadList :: ReadS [CharSet]
readList :: ReadS [CharSet]
$creadPrec :: ReadPrec CharSet
readPrec :: ReadPrec CharSet
$creadListPrec :: ReadPrec [CharSet]
readListPrec :: ReadPrec [CharSet]
Read, Int -> CharSet -> ShowS
[CharSet] -> ShowS
CharSet -> String
(Int -> CharSet -> ShowS)
-> (CharSet -> String) -> ([CharSet] -> ShowS) -> Show CharSet
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CharSet -> ShowS
showsPrec :: Int -> CharSet -> ShowS
$cshow :: CharSet -> String
show :: CharSet -> String
$cshowList :: [CharSet] -> ShowS
showList :: [CharSet] -> ShowS
Show)