packages feed

Cabal-3.16.1.0: src/Distribution/Compat/SnocList.hs

-----------------------------------------------------------------------------

-- |
-- Module      :  Distribution.Compat.SnocList
-- License     :  BSD3
--
-- Maintainer  :  cabal-dev@haskell.org
-- Stability   :  experimental
-- Portability :  portable
--
-- A very reversed list. Has efficient `snoc`
module Distribution.Compat.SnocList
  ( SnocList
  , runSnocList
  , snoc
  ) where

import Distribution.Compat.Prelude
import Prelude ()

newtype SnocList a = SnocList [a]

snoc :: SnocList a -> a -> SnocList a
snoc (SnocList xs) x = SnocList (x : xs)

runSnocList :: SnocList a -> [a]
runSnocList (SnocList xs) = reverse xs

instance Semigroup (SnocList a) where
  SnocList xs <> SnocList ys = SnocList (ys <> xs)

instance Monoid (SnocList a) where
  mempty = SnocList []
  mappend = (<>)