{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Hcompta.LCC.Anchor where import Control.DeepSeq (NFData(..)) import Data.Data (Data(..)) import Data.Eq (Eq(..)) import Data.Function (($), flip) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map import qualified Data.MonoTraversable as MT import Data.Monoid (Monoid(..)) import Data.NonNull (NonNull) import Data.Ord (Ord(..)) import Data.Semigroup (Semigroup(..)) import Data.Typeable (Typeable) import Text.Show (Show) import Hcompta.LCC.Name -- * Type 'Anchor' newtype Anchor = Anchor (NonNull [Name]) deriving (Data, Eq, Ord, MT.MonoFoldable, NFData, Semigroup, Show, Typeable) -- type instance Seqs.Index Anchor = Int type instance MT.Element Anchor = Name -- * Type 'Anchors' newtype Anchors = Anchors (Map Anchor ()) deriving (Data, Eq, NFData, Show, Typeable) instance Monoid Anchors where mempty = Anchors mempty mappend (Anchors x) (Anchors y) = Anchors $ Map.unionWith (flip mappend) x y type instance MT.Element Anchors = Anchor