{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE EmptyDataDecls #-}
module Text.Layout.Table.Spec.Position where

import Data.Default.Class

-- | Specifies a position relative from a beginning.
data Position orientation
    = Start
    | Center
    | End
    deriving Position orientation -> Position orientation -> Bool
(Position orientation -> Position orientation -> Bool)
-> (Position orientation -> Position orientation -> Bool)
-> Eq (Position orientation)
forall orientation.
Position orientation -> Position orientation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Position orientation -> Position orientation -> Bool
$c/= :: forall orientation.
Position orientation -> Position orientation -> Bool
== :: Position orientation -> Position orientation -> Bool
$c== :: forall orientation.
Position orientation -> Position orientation -> Bool
Eq

instance Show (Position H) where
    show :: Position H -> String
show Position H
p = case Position H
p of
        Position H
Start  -> String
"left"
        Position H
Center -> String
"center"
        Position H
End    -> String
"right"

instance Show (Position V) where
    show :: Position V -> String
show Position V
p = case Position V
p of
        Position V
Start  -> String
"top"
        Position V
Center -> String
"center"
        Position V
End    -> String
"bottom"

-- | The default 'Position' displays at the left or top, depending on the orientation.
instance Default (Position orientation) where
    def :: Position orientation
def = Position orientation
forall orientation. Position orientation
beginning

-- | Displays at the left or top, depending on the orientation.
beginning :: Position orientation
beginning :: forall orientation. Position orientation
beginning = Position orientation
forall orientation. Position orientation
Start

-- | Horizontal orientation.
data H

-- | Vertical orientation.
data V

left :: Position H
left :: Position H
left = Position H
forall orientation. Position orientation
Start

right :: Position H
right :: Position H
right = Position H
forall orientation. Position orientation
End

center :: Position orientation
center :: forall orientation. Position orientation
center = Position orientation
forall orientation. Position orientation
Center

top :: Position V
top :: Position V
top = Position V
forall orientation. Position orientation
Start

bottom :: Position V
bottom :: Position V
bottom = Position V
forall orientation. Position orientation
End