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 :: forall a. SnocList a -> a -> SnocList a
snoc (SnocList [a]
xs) a
x = [a] -> SnocList a
forall a. [a] -> SnocList a
SnocList (a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
xs)
runSnocList :: SnocList a -> [a]
runSnocList :: forall a. SnocList a -> [a]
runSnocList (SnocList [a]
xs) = [a] -> [a]
forall a. [a] -> [a]
reverse [a]
xs
instance Semigroup (SnocList a) where
SnocList [a]
xs <> :: SnocList a -> SnocList a -> SnocList a
<> SnocList [a]
ys = [a] -> SnocList a
forall a. [a] -> SnocList a
SnocList ([a]
ys [a] -> [a] -> [a]
forall a. Semigroup a => a -> a -> a
<> [a]
xs)
instance Monoid (SnocList a) where
mempty :: SnocList a
mempty = [a] -> SnocList a
forall a. [a] -> SnocList a
SnocList []
mappend :: SnocList a -> SnocList a -> SnocList a
mappend = SnocList a -> SnocList a -> SnocList a
forall a. Semigroup a => a -> a -> a
(<>)