{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Geometry.Box( module Data.Geometry.Box.Internal
, topSide, leftSide, bottomSide, rightSide
, sides, sides'
) where
import Control.DeepSeq
import Data.Geometry.Box.Internal
import Data.Geometry.LineSegment
import Data.Geometry.Vector
deriving instance (NFData p, NFData r, Arity d) => NFData (Box d p r)
topSide :: Num r => Rectangle p r -> LineSegment 2 p r
topSide = (\(l,r,_,_) -> ClosedLineSegment l r) . corners
bottomSide :: Num r => Rectangle p r -> LineSegment 2 p r
bottomSide = (\(_,_,r,l) -> ClosedLineSegment l r) . corners
leftSide :: Num r => Rectangle p r -> LineSegment 2 p r
leftSide = (\(t,_,_,b) -> ClosedLineSegment b t) . corners
rightSide :: Num r => Rectangle p r -> LineSegment 2 p r
rightSide = (\(_,t,b,_) -> ClosedLineSegment b t) . corners
sides :: Num r => Rectangle p r -> ( LineSegment 2 p r
, LineSegment 2 p r
, LineSegment 2 p r
, LineSegment 2 p r
)
sides = (\(t,r,b,l) -> (t,flipSegment r,flipSegment b,l)) . sides'
sides' :: Num r => Rectangle p r -> ( LineSegment 2 p r
, LineSegment 2 p r
, LineSegment 2 p r
, LineSegment 2 p r
)
sides' r = (topSide r, rightSide r, bottomSide r, leftSide r)