packages feed

pro-abstract-0.1.0.0: library/pro-abstract/ProAbstract/Metadata/MetadataType.hs

module ProAbstract.Metadata.MetadataType
    ( Metadata (..)
    ) where

{- | A set of properties and settings, associated with a document or tag.

The namespaces of properties and settings are distinct; a property can share a name with a setting without conflict.
-}
data Metadata = Metadata
    { metadataProperties :: Set Text      -- ^ 'ProAbstract.properties'
    , metadataSettings   :: Map Text Text -- ^ 'ProAbstract.settings'
    }
  deriving stock (Eq, Show, Generic)
  deriving anyclass (NFData, Hashable)

instance Monoid Metadata where
    mempty = Metadata mempty mempty

instance Semigroup Metadata where
    Metadata p1 s1 <> Metadata p2 s2 = Metadata (p1 <> p2) (s1 <> s2)