hpqtypes-1.2.2: src/Data/Monoid/Space.hs
{-# LANGUAGE FlexibleInstances #-}
module Data.Monoid.Space (
SpaceMonoid(..)
, smappend
, smconcat
, (<+>)
) where
import Data.Monoid
import qualified Data.Text as T
import qualified Data.ByteString as BS
import Data.Monoid.Utils
-- | Extension of 'Monoid' which abstracts the notion of \'separator\'.
class Monoid m => SpaceMonoid m where
mspace :: m
instance SpaceMonoid String where
mspace = " "
instance SpaceMonoid BS.ByteString where
mspace = BS.singleton 32
instance SpaceMonoid T.Text where
mspace = T.singleton ' '
----------------------------------------
-- | Concatenate two elements with separator between them.
smappend :: SpaceMonoid m => m -> m -> m
smappend a b = mconcat [a, mspace, b]
-- | Concatenate a list of elements, inserting separators between them.
smconcat :: SpaceMonoid m => [m] -> m
smconcat = mintercalate mspace
-- | Infix version of 'smappend'.
(<+>) :: SpaceMonoid m => m -> m -> m
(<+>) = smappend
infixr 6 <+>