-------------------------------------------------------------------------------- -- | -- Module : Data.Geometry.Directions -- Copyright : (C) Frank Staals -- License : see the LICENSE file -- Maintainer : Frank Staals -- -------------------------------------------------------------------------------- module Data.Geometry.Directions( CardinalDirection(..) -- , _North, _East, _South, _West , oppositeDirection , InterCardinalDirection(..) -- , _NorthWest, _NorthEast, _SouthEast, _SouthWest , interCardinalsOf ) where import Data.Util import GHC.Generics (Generic) -------------------------------------------------------------------------------- -- | The four cardinal directions. data CardinalDirection = North | East | South | West deriving (Show,Read,Eq,Ord,Enum,Bounded) -- makePrisms ''CardinalDirection -------------------------------------------------------------------------------- -- * Functions on Cardinal Directions -- | Computes the direction opposite to the given one. oppositeDirection :: CardinalDirection -> CardinalDirection oppositeDirection = \case North -> South East -> West South -> North West -> East -------------------------------------------------------------------------------- -- | Intercardinal directions data InterCardinalDirection = NorthWest | NorthEast | SouthEast | SouthWest deriving (Show,Read,Eq,Ord,Enum,Generic) -- makePrisms ''InterCardinalDirection -------------------------------------------------------------------------------- -- * Functions on InterCardinal Directions -- | Get the two intercardinal directions, in increasing order, -- corresponding to the cardinal direction. interCardinalsOf :: CardinalDirection -> Two InterCardinalDirection interCardinalsOf = \case North -> Two NorthWest NorthEast East -> Two NorthEast SouthEast South -> Two SouthEast SouthWest West -> Two SouthWest NorthWest