-- | Types and functions for manipulating directions.
module Hs2048.Direction
    ( Direction (..)
    , directions
    , render
    ) where

{- |
    Represents a direction that the game board can be moved in. The cardinal
    directions are used to avoid collisions with 'Left' and 'Right'.
-}
data Direction
    = West
    | South
    | East
    | North
    deriving (Bounded, Enum, Eq, Show)

{- |
    Returns all of the directions.

    >>> directions
    [West,South,East,North]
-}
directions :: [Direction]
directions = [minBound ..]

{- |
    Renders a direction as a string.

    >>> render West
    "\8592"
-}
render :: Direction -> String
render West = "\x2190"
render South = "\x2193"
render East = "\x2192"
render North = "\x2191"