20 lines
537 B
Haskell
20 lines
537 B
Haskell
module Bound where
|
|
import Geometry
|
|
|
|
import Control.Lens
|
|
import Streaming
|
|
import qualified Streaming.Prelude as S
|
|
import qualified Control.Foldl as L
|
|
|
|
-- NSEW
|
|
boundPoints :: Stream (Of Point2) Identity () -> Maybe (Float,Float,Float,Float)
|
|
{-# INLINE boundPoints #-}
|
|
boundPoints = f . runIdentity . L.purely S.fold_ ((,,,)
|
|
<$> L.premap (^?! _2) L.maximum
|
|
<*> L.premap (^?! _2) L.minimum
|
|
<*> L.premap (^?! _1) L.maximum
|
|
<*> L.premap (^?! _1) L.minimum
|
|
)
|
|
where
|
|
f (mn,ms,me,mw) = (,,,) <$> mn <*> ms <*> me <*> mw
|