{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE Safe #-}
{-# LANGUAGE TypeApplications #-}
module Data.Char.Braille
(
Braille6 (Braille6, top, middle, bottom),
Braille (Braille, row1, row2, row3, row4),
toBraille,
toBraille',
braille6,
braille,
fromBraille6,
fromBraille6',
fromBraille,
fromBraille',
)
where
import Control.DeepSeq (NFData, NFData1)
import Data.Bits (shiftL, shiftR, testBit, (.&.), (.|.))
import Data.Bool (bool)
import Data.Char (chr, ord)
import Data.Char.Block (Row (Row))
import Data.Char.Core (MirrorHorizontal (mirrorHorizontal), MirrorVertical (mirrorVertical), UnicodeCharacter (fromUnicodeChar, fromUnicodeChar', isInCharRange, toUnicodeChar), UnicodeText (isInTextRange), generateIsInTextRange')
import Data.Data (Data)
import Data.Functor.Classes (Eq1 (liftEq), Ord1 (liftCompare))
import Data.Hashable (Hashable)
import Data.Hashable.Lifted (Hashable1)
#if __GLASGOW_HASKELL__ < 803
import Data.Semigroup((<>))
#endif
import GHC.Generics (Generic, Generic1)
import Test.QuickCheck.Arbitrary (Arbitrary (arbitrary), Arbitrary1 (liftArbitrary), arbitrary1)
data Braille6 a = Braille6
{
forall a. Braille6 a -> Row a
top :: Row a,
forall a. Braille6 a -> Row a
middle :: Row a,
forall a. Braille6 a -> Row a
bottom :: Row a
}
deriving (Braille6 a
forall a. a -> a -> Bounded a
forall a. Bounded a => Braille6 a
maxBound :: Braille6 a
$cmaxBound :: forall a. Bounded a => Braille6 a
minBound :: Braille6 a
$cminBound :: forall a. Bounded a => Braille6 a
Bounded, Braille6 a -> DataType
Braille6 a -> Constr
forall {a}. Data a => Typeable (Braille6 a)
forall a. Data a => Braille6 a -> DataType
forall a. Data a => Braille6 a -> Constr
forall a.
Data a =>
(forall b. Data b => b -> b) -> Braille6 a -> Braille6 a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Braille6 a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> Braille6 a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Braille6 a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Braille6 a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille6 a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille6 a -> c (Braille6 a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille6 a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Braille6 a))
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille6 a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille6 a -> c (Braille6 a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille6 a))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Braille6 a -> m (Braille6 a)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Braille6 a -> u
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Braille6 a -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Braille6 a -> [u]
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> Braille6 a -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Braille6 a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Braille6 a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Braille6 a -> r
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Braille6 a -> r
gmapT :: (forall b. Data b => b -> b) -> Braille6 a -> Braille6 a
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b) -> Braille6 a -> Braille6 a
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Braille6 a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Braille6 a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille6 a))
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille6 a))
dataTypeOf :: Braille6 a -> DataType
$cdataTypeOf :: forall a. Data a => Braille6 a -> DataType
toConstr :: Braille6 a -> Constr
$ctoConstr :: forall a. Data a => Braille6 a -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille6 a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille6 a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille6 a -> c (Braille6 a)
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille6 a -> c (Braille6 a)
Data, Braille6 a -> Braille6 a -> Bool
forall a. Eq a => Braille6 a -> Braille6 a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Braille6 a -> Braille6 a -> Bool
$c/= :: forall a. Eq a => Braille6 a -> Braille6 a -> Bool
== :: Braille6 a -> Braille6 a -> Bool
$c== :: forall a. Eq a => Braille6 a -> Braille6 a -> Bool
Eq, forall a. Eq a => a -> Braille6 a -> Bool
forall a. Num a => Braille6 a -> a
forall a. Ord a => Braille6 a -> a
forall m. Monoid m => Braille6 m -> m
forall a. Braille6 a -> Bool
forall a. Braille6 a -> Int
forall a. Braille6 a -> [a]
forall a. (a -> a -> a) -> Braille6 a -> a
forall m a. Monoid m => (a -> m) -> Braille6 a -> m
forall b a. (b -> a -> b) -> b -> Braille6 a -> b
forall a b. (a -> b -> b) -> b -> Braille6 a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: forall a. Num a => Braille6 a -> a
$cproduct :: forall a. Num a => Braille6 a -> a
sum :: forall a. Num a => Braille6 a -> a
$csum :: forall a. Num a => Braille6 a -> a
minimum :: forall a. Ord a => Braille6 a -> a
$cminimum :: forall a. Ord a => Braille6 a -> a
maximum :: forall a. Ord a => Braille6 a -> a
$cmaximum :: forall a. Ord a => Braille6 a -> a
elem :: forall a. Eq a => a -> Braille6 a -> Bool
$celem :: forall a. Eq a => a -> Braille6 a -> Bool
length :: forall a. Braille6 a -> Int
$clength :: forall a. Braille6 a -> Int
null :: forall a. Braille6 a -> Bool
$cnull :: forall a. Braille6 a -> Bool
toList :: forall a. Braille6 a -> [a]
$ctoList :: forall a. Braille6 a -> [a]
foldl1 :: forall a. (a -> a -> a) -> Braille6 a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Braille6 a -> a
foldr1 :: forall a. (a -> a -> a) -> Braille6 a -> a
$cfoldr1 :: forall a. (a -> a -> a) -> Braille6 a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> Braille6 a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Braille6 a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Braille6 a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Braille6 a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Braille6 a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Braille6 a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Braille6 a -> b
$cfoldr :: forall a b. (a -> b -> b) -> b -> Braille6 a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> Braille6 a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Braille6 a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Braille6 a -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Braille6 a -> m
fold :: forall m. Monoid m => Braille6 m -> m
$cfold :: forall m. Monoid m => Braille6 m -> m
Foldable, forall a b. a -> Braille6 b -> Braille6 a
forall a b. (a -> b) -> Braille6 a -> Braille6 b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Braille6 b -> Braille6 a
$c<$ :: forall a b. a -> Braille6 b -> Braille6 a
fmap :: forall a b. (a -> b) -> Braille6 a -> Braille6 b
$cfmap :: forall a b. (a -> b) -> Braille6 a -> Braille6 b
Functor, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Braille6 a) x -> Braille6 a
forall a x. Braille6 a -> Rep (Braille6 a) x
$cto :: forall a x. Rep (Braille6 a) x -> Braille6 a
$cfrom :: forall a x. Braille6 a -> Rep (Braille6 a) x
Generic, forall a. Rep1 Braille6 a -> Braille6 a
forall a. Braille6 a -> Rep1 Braille6 a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cto1 :: forall a. Rep1 Braille6 a -> Braille6 a
$cfrom1 :: forall a. Braille6 a -> Rep1 Braille6 a
Generic1, Braille6 a -> Braille6 a -> Bool
Braille6 a -> Braille6 a -> Ordering
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
forall {a}. Ord a => Eq (Braille6 a)
forall a. Ord a => Braille6 a -> Braille6 a -> Bool
forall a. Ord a => Braille6 a -> Braille6 a -> Ordering
forall a. Ord a => Braille6 a -> Braille6 a -> Braille6 a
min :: Braille6 a -> Braille6 a -> Braille6 a
$cmin :: forall a. Ord a => Braille6 a -> Braille6 a -> Braille6 a
max :: Braille6 a -> Braille6 a -> Braille6 a
$cmax :: forall a. Ord a => Braille6 a -> Braille6 a -> Braille6 a
>= :: Braille6 a -> Braille6 a -> Bool
$c>= :: forall a. Ord a => Braille6 a -> Braille6 a -> Bool
> :: Braille6 a -> Braille6 a -> Bool
$c> :: forall a. Ord a => Braille6 a -> Braille6 a -> Bool
<= :: Braille6 a -> Braille6 a -> Bool
$c<= :: forall a. Ord a => Braille6 a -> Braille6 a -> Bool
< :: Braille6 a -> Braille6 a -> Bool
$c< :: forall a. Ord a => Braille6 a -> Braille6 a -> Bool
compare :: Braille6 a -> Braille6 a -> Ordering
$ccompare :: forall a. Ord a => Braille6 a -> Braille6 a -> Ordering
Ord, ReadPrec [Braille6 a]
ReadPrec (Braille6 a)
ReadS [Braille6 a]
forall a. Read a => ReadPrec [Braille6 a]
forall a. Read a => ReadPrec (Braille6 a)
forall a. Read a => Int -> ReadS (Braille6 a)
forall a. Read a => ReadS [Braille6 a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Braille6 a]
$creadListPrec :: forall a. Read a => ReadPrec [Braille6 a]
readPrec :: ReadPrec (Braille6 a)
$creadPrec :: forall a. Read a => ReadPrec (Braille6 a)
readList :: ReadS [Braille6 a]
$creadList :: forall a. Read a => ReadS [Braille6 a]
readsPrec :: Int -> ReadS (Braille6 a)
$creadsPrec :: forall a. Read a => Int -> ReadS (Braille6 a)
Read, Int -> Braille6 a -> ShowS
forall a. Show a => Int -> Braille6 a -> ShowS
forall a. Show a => [Braille6 a] -> ShowS
forall a. Show a => Braille6 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Braille6 a] -> ShowS
$cshowList :: forall a. Show a => [Braille6 a] -> ShowS
show :: Braille6 a -> String
$cshow :: forall a. Show a => Braille6 a -> String
showsPrec :: Int -> Braille6 a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Braille6 a -> ShowS
Show, Functor Braille6
Foldable Braille6
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => Braille6 (m a) -> m (Braille6 a)
forall (f :: * -> *) a.
Applicative f =>
Braille6 (f a) -> f (Braille6 a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Braille6 a -> m (Braille6 b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Braille6 a -> f (Braille6 b)
sequence :: forall (m :: * -> *) a. Monad m => Braille6 (m a) -> m (Braille6 a)
$csequence :: forall (m :: * -> *) a. Monad m => Braille6 (m a) -> m (Braille6 a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Braille6 a -> m (Braille6 b)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Braille6 a -> m (Braille6 b)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
Braille6 (f a) -> f (Braille6 a)
$csequenceA :: forall (f :: * -> *) a.
Applicative f =>
Braille6 (f a) -> f (Braille6 a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Braille6 a -> f (Braille6 b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Braille6 a -> f (Braille6 b)
Traversable)
instance Eq1 Braille6 where
liftEq :: forall a b. (a -> b -> Bool) -> Braille6 a -> Braille6 b -> Bool
liftEq a -> b -> Bool
cmp ~(Braille6 Row a
ta Row a
ma Row a
ba) ~(Braille6 Row b
tb Row b
mb Row b
bb) = Row a -> Row b -> Bool
cmp' Row a
ta Row b
tb Bool -> Bool -> Bool
&& Row a -> Row b -> Bool
cmp' Row a
ma Row b
mb Bool -> Bool -> Bool
&& Row a -> Row b -> Bool
cmp' Row a
ba Row b
bb
where
cmp' :: Row a -> Row b -> Bool
cmp' = forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> f a -> f b -> Bool
liftEq a -> b -> Bool
cmp
instance Hashable1 Braille6
instance Hashable a => Hashable (Braille6 a)
instance MirrorHorizontal (Braille6 a) where
mirrorHorizontal :: Braille6 a -> Braille6 a
mirrorHorizontal (Braille6 Row a
a Row a
b Row a
c) = forall a. Row a -> Row a -> Row a -> Braille6 a
Braille6 Row a
c Row a
b Row a
a
instance MirrorVertical (Braille6 a) where
mirrorVertical :: Braille6 a -> Braille6 a
mirrorVertical (Braille6 Row a
a Row a
b Row a
c) = forall a. Row a -> Row a -> Row a -> Braille6 a
Braille6 (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
a) (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
b) (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
c)
instance NFData a => NFData (Braille6 a)
instance NFData1 Braille6
instance Ord1 Braille6 where
liftCompare :: forall a b.
(a -> b -> Ordering) -> Braille6 a -> Braille6 b -> Ordering
liftCompare a -> b -> Ordering
cmp ~(Braille6 Row a
ta Row a
ma Row a
ba) ~(Braille6 Row b
tb Row b
mb Row b
bb) = Row a -> Row b -> Ordering
cmp' Row a
ta Row b
tb forall a. Semigroup a => a -> a -> a
<> Row a -> Row b -> Ordering
cmp' Row a
ma Row b
mb forall a. Semigroup a => a -> a -> a
<> Row a -> Row b -> Ordering
cmp' Row a
ba Row b
bb
where
cmp' :: Row a -> Row b -> Ordering
cmp' = forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering) -> f a -> f b -> Ordering
liftCompare a -> b -> Ordering
cmp
data Braille a = Braille
{
forall a. Braille a -> Row a
row1 :: Row a,
forall a. Braille a -> Row a
row2 :: Row a,
forall a. Braille a -> Row a
row3 :: Row a,
forall a. Braille a -> Row a
row4 :: Row a
}
deriving (Braille a
forall a. a -> a -> Bounded a
forall a. Bounded a => Braille a
maxBound :: Braille a
$cmaxBound :: forall a. Bounded a => Braille a
minBound :: Braille a
$cminBound :: forall a. Bounded a => Braille a
Bounded, Braille a -> DataType
Braille a -> Constr
forall {a}. Data a => Typeable (Braille a)
forall a. Data a => Braille a -> DataType
forall a. Data a => Braille a -> Constr
forall a.
Data a =>
(forall b. Data b => b -> b) -> Braille a -> Braille a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Braille a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> Braille a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Braille a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Braille a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille a -> c (Braille a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Braille a))
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille a -> c (Braille a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille a))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Braille a -> m (Braille a)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Braille a -> u
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Braille a -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Braille a -> [u]
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> Braille a -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Braille a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Braille a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Braille a -> r
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Braille a -> r
gmapT :: (forall b. Data b => b -> b) -> Braille a -> Braille a
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b) -> Braille a -> Braille a
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Braille a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Braille a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille a))
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Braille a))
dataTypeOf :: Braille a -> DataType
$cdataTypeOf :: forall a. Data a => Braille a -> DataType
toConstr :: Braille a -> Constr
$ctoConstr :: forall a. Data a => Braille a -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Braille a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille a -> c (Braille a)
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Braille a -> c (Braille a)
Data, Braille a -> Braille a -> Bool
forall a. Eq a => Braille a -> Braille a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Braille a -> Braille a -> Bool
$c/= :: forall a. Eq a => Braille a -> Braille a -> Bool
== :: Braille a -> Braille a -> Bool
$c== :: forall a. Eq a => Braille a -> Braille a -> Bool
Eq, forall a. Eq a => a -> Braille a -> Bool
forall a. Num a => Braille a -> a
forall a. Ord a => Braille a -> a
forall m. Monoid m => Braille m -> m
forall a. Braille a -> Bool
forall a. Braille a -> Int
forall a. Braille a -> [a]
forall a. (a -> a -> a) -> Braille a -> a
forall m a. Monoid m => (a -> m) -> Braille a -> m
forall b a. (b -> a -> b) -> b -> Braille a -> b
forall a b. (a -> b -> b) -> b -> Braille a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: forall a. Num a => Braille a -> a
$cproduct :: forall a. Num a => Braille a -> a
sum :: forall a. Num a => Braille a -> a
$csum :: forall a. Num a => Braille a -> a
minimum :: forall a. Ord a => Braille a -> a
$cminimum :: forall a. Ord a => Braille a -> a
maximum :: forall a. Ord a => Braille a -> a
$cmaximum :: forall a. Ord a => Braille a -> a
elem :: forall a. Eq a => a -> Braille a -> Bool
$celem :: forall a. Eq a => a -> Braille a -> Bool
length :: forall a. Braille a -> Int
$clength :: forall a. Braille a -> Int
null :: forall a. Braille a -> Bool
$cnull :: forall a. Braille a -> Bool
toList :: forall a. Braille a -> [a]
$ctoList :: forall a. Braille a -> [a]
foldl1 :: forall a. (a -> a -> a) -> Braille a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Braille a -> a
foldr1 :: forall a. (a -> a -> a) -> Braille a -> a
$cfoldr1 :: forall a. (a -> a -> a) -> Braille a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> Braille a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Braille a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Braille a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Braille a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Braille a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Braille a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Braille a -> b
$cfoldr :: forall a b. (a -> b -> b) -> b -> Braille a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> Braille a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Braille a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Braille a -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Braille a -> m
fold :: forall m. Monoid m => Braille m -> m
$cfold :: forall m. Monoid m => Braille m -> m
Foldable, forall a b. a -> Braille b -> Braille a
forall a b. (a -> b) -> Braille a -> Braille b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Braille b -> Braille a
$c<$ :: forall a b. a -> Braille b -> Braille a
fmap :: forall a b. (a -> b) -> Braille a -> Braille b
$cfmap :: forall a b. (a -> b) -> Braille a -> Braille b
Functor, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Braille a) x -> Braille a
forall a x. Braille a -> Rep (Braille a) x
$cto :: forall a x. Rep (Braille a) x -> Braille a
$cfrom :: forall a x. Braille a -> Rep (Braille a) x
Generic, forall a. Rep1 Braille a -> Braille a
forall a. Braille a -> Rep1 Braille a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cto1 :: forall a. Rep1 Braille a -> Braille a
$cfrom1 :: forall a. Braille a -> Rep1 Braille a
Generic1, Braille a -> Braille a -> Bool
Braille a -> Braille a -> Ordering
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
forall {a}. Ord a => Eq (Braille a)
forall a. Ord a => Braille a -> Braille a -> Bool
forall a. Ord a => Braille a -> Braille a -> Ordering
forall a. Ord a => Braille a -> Braille a -> Braille a
min :: Braille a -> Braille a -> Braille a
$cmin :: forall a. Ord a => Braille a -> Braille a -> Braille a
max :: Braille a -> Braille a -> Braille a
$cmax :: forall a. Ord a => Braille a -> Braille a -> Braille a
>= :: Braille a -> Braille a -> Bool
$c>= :: forall a. Ord a => Braille a -> Braille a -> Bool
> :: Braille a -> Braille a -> Bool
$c> :: forall a. Ord a => Braille a -> Braille a -> Bool
<= :: Braille a -> Braille a -> Bool
$c<= :: forall a. Ord a => Braille a -> Braille a -> Bool
< :: Braille a -> Braille a -> Bool
$c< :: forall a. Ord a => Braille a -> Braille a -> Bool
compare :: Braille a -> Braille a -> Ordering
$ccompare :: forall a. Ord a => Braille a -> Braille a -> Ordering
Ord, ReadPrec [Braille a]
ReadPrec (Braille a)
ReadS [Braille a]
forall a. Read a => ReadPrec [Braille a]
forall a. Read a => ReadPrec (Braille a)
forall a. Read a => Int -> ReadS (Braille a)
forall a. Read a => ReadS [Braille a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Braille a]
$creadListPrec :: forall a. Read a => ReadPrec [Braille a]
readPrec :: ReadPrec (Braille a)
$creadPrec :: forall a. Read a => ReadPrec (Braille a)
readList :: ReadS [Braille a]
$creadList :: forall a. Read a => ReadS [Braille a]
readsPrec :: Int -> ReadS (Braille a)
$creadsPrec :: forall a. Read a => Int -> ReadS (Braille a)
Read, Int -> Braille a -> ShowS
forall a. Show a => Int -> Braille a -> ShowS
forall a. Show a => [Braille a] -> ShowS
forall a. Show a => Braille a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Braille a] -> ShowS
$cshowList :: forall a. Show a => [Braille a] -> ShowS
show :: Braille a -> String
$cshow :: forall a. Show a => Braille a -> String
showsPrec :: Int -> Braille a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Braille a -> ShowS
Show, Functor Braille
Foldable Braille
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => Braille (m a) -> m (Braille a)
forall (f :: * -> *) a.
Applicative f =>
Braille (f a) -> f (Braille a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Braille a -> m (Braille b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Braille a -> f (Braille b)
sequence :: forall (m :: * -> *) a. Monad m => Braille (m a) -> m (Braille a)
$csequence :: forall (m :: * -> *) a. Monad m => Braille (m a) -> m (Braille a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Braille a -> m (Braille b)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Braille a -> m (Braille b)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
Braille (f a) -> f (Braille a)
$csequenceA :: forall (f :: * -> *) a.
Applicative f =>
Braille (f a) -> f (Braille a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Braille a -> f (Braille b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Braille a -> f (Braille b)
Traversable)
instance Eq1 Braille where
liftEq :: forall a b. (a -> b -> Bool) -> Braille a -> Braille b -> Bool
liftEq a -> b -> Bool
cmp ~(Braille Row a
a1 Row a
a2 Row a
a3 Row a
a4) ~(Braille Row b
b1 Row b
b2 Row b
b3 Row b
b4) = Row a -> Row b -> Bool
cmp' Row a
a1 Row b
b1 Bool -> Bool -> Bool
&& Row a -> Row b -> Bool
cmp' Row a
a2 Row b
b2 Bool -> Bool -> Bool
&& Row a -> Row b -> Bool
cmp' Row a
a3 Row b
b3 Bool -> Bool -> Bool
&& Row a -> Row b -> Bool
cmp' Row a
a4 Row b
b4
where
cmp' :: Row a -> Row b -> Bool
cmp' = forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> f a -> f b -> Bool
liftEq a -> b -> Bool
cmp
instance Hashable1 Braille
instance Hashable a => Hashable (Braille a)
instance MirrorHorizontal (Braille a) where
mirrorHorizontal :: Braille a -> Braille a
mirrorHorizontal (Braille Row a
a Row a
b Row a
c Row a
d) = forall a. Row a -> Row a -> Row a -> Row a -> Braille a
Braille Row a
d Row a
c Row a
b Row a
a
instance MirrorVertical (Braille a) where
mirrorVertical :: Braille a -> Braille a
mirrorVertical (Braille Row a
a Row a
b Row a
c Row a
d) = forall a. Row a -> Row a -> Row a -> Row a -> Braille a
Braille (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
a) (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
b) (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
c) (forall a. MirrorVertical a => a -> a
mirrorVertical Row a
d)
instance NFData a => NFData (Braille a)
instance NFData1 Braille
instance Ord1 Braille where
liftCompare :: forall a b.
(a -> b -> Ordering) -> Braille a -> Braille b -> Ordering
liftCompare a -> b -> Ordering
cmp ~(Braille Row a
a1 Row a
a2 Row a
a3 Row a
a4) ~(Braille Row b
b1 Row b
b2 Row b
b3 Row b
b4) = Row a -> Row b -> Ordering
cmp' Row a
a1 Row b
b1 forall a. Semigroup a => a -> a -> a
<> Row a -> Row b -> Ordering
cmp' Row a
a2 Row b
b2 forall a. Semigroup a => a -> a -> a
<> Row a -> Row b -> Ordering
cmp' Row a
a3 Row b
b3 forall a. Semigroup a => a -> a -> a
<> Row a -> Row b -> Ordering
cmp' Row a
a4 Row b
b4
where
cmp' :: Row a -> Row b -> Ordering
cmp' = forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering) -> f a -> f b -> Ordering
liftCompare a -> b -> Ordering
cmp
toBraille' ::
a ->
Braille6 a ->
Braille a
toBraille' :: forall a. a -> Braille6 a -> Braille a
toBraille' a
d (Braille6 Row a
r0 Row a
r1 Row a
r2) = forall a. Row a -> Row a -> Row a -> Row a -> Braille a
Braille Row a
r0 Row a
r1 Row a
r2 (forall a. a -> a -> Row a
Row a
d a
d)
toBraille ::
Braille6 Bool ->
Braille Bool
toBraille :: Braille6 Bool -> Braille Bool
toBraille = forall a. a -> Braille6 a -> Braille a
toBraille' Bool
False
fromBraille' ::
Char ->
Braille Bool
fromBraille' :: Char -> Braille Bool
fromBraille' Char
c = forall a. Row a -> Row a -> Row a -> Row a -> Braille a
Braille (Int -> Row Bool
go Int
0x00) (Int -> Row Bool
go Int
0x01) (Int -> Row Bool
go Int
0x02) (forall a. a -> a -> Row a
Row (Int -> Bool
tB' Int
0x03) (Int -> Bool
tB' Int
0x04))
where
b :: Int
b = Char -> Int
ord Char
c forall a. Bits a => a -> a -> a
.&. Int
0xff
tB :: Int -> Bool
tB = forall a. Bits a => a -> Int -> Bool
testBit Int
b
tB' :: Int -> Bool
tB' = forall a. Bits a => a -> Int -> Bool
testBit (forall a. Bits a => a -> Int -> a
shiftR Int
b Int
3)
go :: Int -> Row Bool
go Int
n = forall a. a -> a -> Row a
Row (Int -> Bool
tB Int
n) (Int -> Bool
tB' Int
n)
fromBraille6' ::
Char ->
Braille6 Bool
fromBraille6' :: Char -> Braille6 Bool
fromBraille6' Char
c = forall a. Row a -> Row a -> Row a -> Braille6 a
Braille6 (Int -> Row Bool
go Int
0x00) (Int -> Row Bool
go Int
0x01) (Int -> Row Bool
go Int
0x02)
where
b :: Int
b = Char -> Int
ord Char
c forall a. Bits a => a -> a -> a
.&. Int
0x3f
go :: Int -> Row Bool
go Int
n = forall a. a -> a -> Row a
Row (forall a. Bits a => a -> Int -> Bool
testBit Int
b Int
n) (forall a. Bits a => a -> Int -> Bool
testBit (forall a. Bits a => a -> Int -> a
shiftR Int
b Int
3) Int
n)
fromBraille ::
Char ->
Maybe (Braille Bool)
fromBraille :: Char -> Maybe (Braille Bool)
fromBraille Char
c
| Char
'\x2800' forall a. Ord a => a -> a -> Bool
> Char
c Bool -> Bool -> Bool
|| Char
c forall a. Ord a => a -> a -> Bool
> Char
'\x28ff' = forall a. Maybe a
Nothing
| Bool
otherwise = forall a. a -> Maybe a
Just (Char -> Braille Bool
fromBraille' Char
c)
fromBraille6 ::
Char ->
Maybe (Braille6 Bool)
fromBraille6 :: Char -> Maybe (Braille6 Bool)
fromBraille6 Char
c
| Char
'\x2800' forall a. Ord a => a -> a -> Bool
> Char
c Bool -> Bool -> Bool
|| Char
c forall a. Ord a => a -> a -> Bool
> Char
'\x283f' = forall a. Maybe a
Nothing
| Bool
otherwise = forall a. a -> Maybe a
Just (Char -> Braille6 Bool
fromBraille6' Char
c)
instance Arbitrary a => Arbitrary (Braille6 a) where
arbitrary :: Gen (Braille6 a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
instance Arbitrary1 Braille6 where
liftArbitrary :: forall a. Gen a -> Gen (Braille6 a)
liftArbitrary Gen a
arb = forall a. Row a -> Row a -> Row a -> Braille6 a
Braille6 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Row a)
arb' forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Row a)
arb' forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Row a)
arb'
where
arb' :: Gen (Row a)
arb' = forall (f :: * -> *) a. Arbitrary1 f => Gen a -> Gen (f a)
liftArbitrary Gen a
arb
instance Arbitrary a => Arbitrary (Braille a) where
arbitrary :: Gen (Braille a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
instance Arbitrary1 Braille where
liftArbitrary :: forall a. Gen a -> Gen (Braille a)
liftArbitrary Gen a
arb = forall a. Row a -> Row a -> Row a -> Row a -> Braille a
Braille forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Row a)
arb' forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Row a)
arb' forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Row a)
arb' forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Row a)
arb'
where
arb' :: Gen (Row a)
arb' = forall (f :: * -> *) a. Arbitrary1 f => Gen a -> Gen (f a)
liftArbitrary Gen a
arb
_rowValue' :: Int -> Row Bool -> Int
_rowValue' :: Int -> Row Bool -> Int
_rowValue' Int
d (Row Bool
b0 Bool
b1) = forall a. a -> a -> Bool -> a
bool Int
0 Int
1 Bool
b0 forall a. Bits a => a -> a -> a
.|. forall a. a -> a -> Bool -> a
bool Int
0 Int
d Bool
b1
_rowValue :: Row Bool -> Int
_rowValue :: Row Bool -> Int
_rowValue = Int -> Row Bool -> Int
_rowValue' Int
8
braille6 :: Braille6 Bool -> Char
braille6 :: Braille6 Bool -> Char
braille6 = Braille Bool -> Char
braille forall b c a. (b -> c) -> (a -> b) -> a -> c
. Braille6 Bool -> Braille Bool
toBraille
braille :: Braille Bool -> Char
braille :: Braille Bool -> Char
braille (Braille Row Bool
r1 Row Bool
r2 Row Bool
r3 Row Bool
r4) = Int -> Char
chr (Int
0x2800 forall a. Bits a => a -> a -> a
.|. Row Bool -> Int
_rowValue Row Bool
r1 forall a. Bits a => a -> a -> a
.|. forall a. Bits a => a -> Int -> a
shiftL (Row Bool -> Int
_rowValue Row Bool
r2) Int
1 forall a. Bits a => a -> a -> a
.|. forall a. Bits a => a -> Int -> a
shiftL (Row Bool -> Int
_rowValue Row Bool
r3) Int
2 forall a. Bits a => a -> a -> a
.|. forall a. Bits a => a -> Int -> a
shiftL (Int -> Row Bool -> Int
_rowValue' Int
2 Row Bool
r4) Int
6)
instance UnicodeCharacter (Braille Bool) where
toUnicodeChar :: Braille Bool -> Char
toUnicodeChar = Braille Bool -> Char
braille
fromUnicodeChar :: Char -> Maybe (Braille Bool)
fromUnicodeChar = Char -> Maybe (Braille Bool)
fromBraille
fromUnicodeChar' :: Char -> Braille Bool
fromUnicodeChar' = Char -> Braille Bool
fromBraille'
isInCharRange :: Char -> Bool
isInCharRange Char
c = Char
'\x2800' forall a. Ord a => a -> a -> Bool
<= Char
c Bool -> Bool -> Bool
&& Char
c forall a. Ord a => a -> a -> Bool
<= Char
'\x28ff'
instance UnicodeCharacter (Braille6 Bool) where
toUnicodeChar :: Braille6 Bool -> Char
toUnicodeChar = Braille6 Bool -> Char
braille6
fromUnicodeChar :: Char -> Maybe (Braille6 Bool)
fromUnicodeChar = Char -> Maybe (Braille6 Bool)
fromBraille6
fromUnicodeChar' :: Char -> Braille6 Bool
fromUnicodeChar' = Char -> Braille6 Bool
fromBraille6'
isInCharRange :: Char -> Bool
isInCharRange Char
c = Char
'\x2800' forall a. Ord a => a -> a -> Bool
<= Char
c Bool -> Bool -> Bool
&& Char
c forall a. Ord a => a -> a -> Bool
<= Char
'\x283f'
instance UnicodeText (Braille Bool) where
isInTextRange :: Text -> Bool
isInTextRange = forall a. UnicodeCharacter a => Text -> Bool
generateIsInTextRange' @(Braille Bool)
instance UnicodeText (Braille6 Bool) where
isInTextRange :: Text -> Bool
isInTextRange = forall a. UnicodeCharacter a => Text -> Bool
generateIsInTextRange' @(Braille6 Bool)