Cabal-2.0.0.2: Distribution/Compat/DList.hs
-----------------------------------------------------------------------------
-- |
-- Module : Distribution.Compat.DList
-- Copyright : (c) Ben Gamari 2015-2019
-- License : BSD3
--
-- Maintainer : cabal-dev@haskell.org
-- Stability : experimental
-- Portability : portable
--
-- A very simple difference list.
module Distribution.Compat.DList (
DList,
runDList,
singleton,
snoc,
) where
import Prelude ()
import Distribution.Compat.Prelude
-- | Difference list.
newtype DList a = DList ([a] -> [a])
runDList :: DList a -> [a]
runDList (DList run) = run []
-- | Make 'DList' with containing single element.
singleton :: a -> DList a
singleton a = DList (a:)
snoc :: DList a -> a -> DList a
snoc xs x = xs <> singleton x
instance Monoid (DList a) where
mempty = DList id
mappend = (<>)
instance Semigroup (DList a) where
DList a <> DList b = DList (a . b)