packages feed

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