module Stitch.Types ( module Stitch.Types.Selector , Children(..) , Property(..) , Import(..) , Block(..) , InnerBlock(..) ) where import Stitch.Types.Selector import Data.Map (Map) import Data.Monoid import Data.Text (Text) import qualified Data.Map as Map newtype Children = Children (Map Selector InnerBlock) deriving (Show, Read, Eq) instance Monoid Children where mempty = Children mempty Children x `mappend` Children y = Children (Map.unionWith mappend x y) data Property = Property Text Text | Comment Text deriving (Show, Read, Eq) data Import = Import Text deriving (Show, Read, Eq) data InnerBlock = InnerBlock [Property] Children deriving (Show, Read, Eq) instance Monoid InnerBlock where mempty = InnerBlock [] mempty InnerBlock p c `mappend` InnerBlock q d = InnerBlock (p <> q) (c <> d) data Block = Block [Import] [Property] Children deriving (Show, Read, Eq) instance Monoid Block where mempty = Block mempty mempty mempty Block i p c `mappend` Block j q d = Block (i <> j) (p <> q) (c <> d)