keid-geometry-0.1.0.0: src/Geometry/Edge.hs
module Geometry.Edge where
import RIO
data Edge a = Edge
{ edgeFrom :: a
, edgeTo :: a
} deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
{-# INLINEABLE edgesR #-}
edgesR :: [a] -> Maybe [Edge a]
edgesR xs = go (Just []) xs
where
go acc = \case
[] ->
acc
[_one] ->
Nothing
edgeFrom : edgeTo : next ->
case acc of
Nothing ->
go (Just [Edge{..}]) next
Just old ->
go (Just (Edge{..} : old)) next