-- Types module
-- By Gregory W. Schwartz
--
-- Collects all application specific types
{-# LANGUAGE DeriveGeneric #-}
module Types where
-- Standard
import GHC.Generics
import qualified Data.Sequence as Seq
import Data.Tree
-- Cabal
import qualified Data.Text as T
import Data.Aeson
-- Algebraic
data NodeLabel = NodeLabel { nodeID :: !T.Text
, nodeLabels :: !Labels
} deriving (Generic, Eq, Ord, Read, Show)
data Format = Haskell | JSON | Lineage T.Text deriving (Read)
data Exclusivity = Exclusive | AllExclusive | Majority deriving (Read)
-- Simple
type Label = T.Text
-- Advanced
type Labels = Seq.Seq Label
instance FromJSON NodeLabel