module BishBosh.Direction.Horizontal(
Horizontal(),
nHorizontals
) where
import qualified BishBosh.Property.FixedMembership as Property.FixedMembership
import qualified BishBosh.Property.Opposable as Property.Opposable
import qualified BishBosh.Property.Reflectable as Property.Reflectable
import qualified BishBosh.Type.Count as Type.Count
data Horizontal = W | E deriving (Int -> Horizontal
Horizontal -> Int
Horizontal -> [Horizontal]
Horizontal -> Horizontal
Horizontal -> Horizontal -> [Horizontal]
Horizontal -> Horizontal -> Horizontal -> [Horizontal]
(Horizontal -> Horizontal)
-> (Horizontal -> Horizontal)
-> (Int -> Horizontal)
-> (Horizontal -> Int)
-> (Horizontal -> [Horizontal])
-> (Horizontal -> Horizontal -> [Horizontal])
-> (Horizontal -> Horizontal -> [Horizontal])
-> (Horizontal -> Horizontal -> Horizontal -> [Horizontal])
-> Enum Horizontal
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Horizontal -> Horizontal -> Horizontal -> [Horizontal]
$cenumFromThenTo :: Horizontal -> Horizontal -> Horizontal -> [Horizontal]
enumFromTo :: Horizontal -> Horizontal -> [Horizontal]
$cenumFromTo :: Horizontal -> Horizontal -> [Horizontal]
enumFromThen :: Horizontal -> Horizontal -> [Horizontal]
$cenumFromThen :: Horizontal -> Horizontal -> [Horizontal]
enumFrom :: Horizontal -> [Horizontal]
$cenumFrom :: Horizontal -> [Horizontal]
fromEnum :: Horizontal -> Int
$cfromEnum :: Horizontal -> Int
toEnum :: Int -> Horizontal
$ctoEnum :: Int -> Horizontal
pred :: Horizontal -> Horizontal
$cpred :: Horizontal -> Horizontal
succ :: Horizontal -> Horizontal
$csucc :: Horizontal -> Horizontal
Enum, Horizontal -> Horizontal -> Bool
(Horizontal -> Horizontal -> Bool)
-> (Horizontal -> Horizontal -> Bool) -> Eq Horizontal
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Horizontal -> Horizontal -> Bool
$c/= :: Horizontal -> Horizontal -> Bool
== :: Horizontal -> Horizontal -> Bool
$c== :: Horizontal -> Horizontal -> Bool
Eq, Eq Horizontal
Eq Horizontal
-> (Horizontal -> Horizontal -> Ordering)
-> (Horizontal -> Horizontal -> Bool)
-> (Horizontal -> Horizontal -> Bool)
-> (Horizontal -> Horizontal -> Bool)
-> (Horizontal -> Horizontal -> Bool)
-> (Horizontal -> Horizontal -> Horizontal)
-> (Horizontal -> Horizontal -> Horizontal)
-> Ord Horizontal
Horizontal -> Horizontal -> Bool
Horizontal -> Horizontal -> Ordering
Horizontal -> Horizontal -> Horizontal
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
min :: Horizontal -> Horizontal -> Horizontal
$cmin :: Horizontal -> Horizontal -> Horizontal
max :: Horizontal -> Horizontal -> Horizontal
$cmax :: Horizontal -> Horizontal -> Horizontal
>= :: Horizontal -> Horizontal -> Bool
$c>= :: Horizontal -> Horizontal -> Bool
> :: Horizontal -> Horizontal -> Bool
$c> :: Horizontal -> Horizontal -> Bool
<= :: Horizontal -> Horizontal -> Bool
$c<= :: Horizontal -> Horizontal -> Bool
< :: Horizontal -> Horizontal -> Bool
$c< :: Horizontal -> Horizontal -> Bool
compare :: Horizontal -> Horizontal -> Ordering
$ccompare :: Horizontal -> Horizontal -> Ordering
$cp1Ord :: Eq Horizontal
Ord, Int -> Horizontal -> ShowS
[Horizontal] -> ShowS
Horizontal -> String
(Int -> Horizontal -> ShowS)
-> (Horizontal -> String)
-> ([Horizontal] -> ShowS)
-> Show Horizontal
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Horizontal] -> ShowS
$cshowList :: [Horizontal] -> ShowS
show :: Horizontal -> String
$cshow :: Horizontal -> String
showsPrec :: Int -> Horizontal -> ShowS
$cshowsPrec :: Int -> Horizontal -> ShowS
Show)
instance Read Horizontal where
readsPrec :: Int -> ReadS Horizontal
readsPrec Int
_ (Char
'W' : String
s) = [(Horizontal
W, String
s)]
readsPrec Int
_ (Char
'E' : String
s) = [(Horizontal
E, String
s)]
readsPrec Int
_ String
_ = []
instance Property.FixedMembership.FixedMembership Horizontal where
members :: [Horizontal]
members = [Horizontal]
range
instance Property.Opposable.Opposable Horizontal where
getOpposite :: Horizontal -> Horizontal
getOpposite Horizontal
W = Horizontal
E
getOpposite Horizontal
E = Horizontal
W
instance Property.Reflectable.ReflectableOnY Horizontal where
reflectOnY :: Horizontal -> Horizontal
reflectOnY = Horizontal -> Horizontal
forall a. Opposable a => a -> a
Property.Opposable.getOpposite
range :: [Horizontal]
range :: [Horizontal]
range = [ Int -> Horizontal
forall a. Enum a => Int -> a
toEnum Int
0 .. ]
nHorizontals :: Type.Count.NDirections
nHorizontals :: Int
nHorizontals = Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ [Horizontal] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Horizontal]
range