{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} -- | -- This module describes the abstract tree that can be validated by Relapse. -- -- The JSON and XML parsers both are both versions of this type class. module Parsers ( Tree(..), Label(..) ) where import Control.DeepSeq (NFData) import GHC.Generics (Generic) import Data.Text (Text) import Data.ByteString (ByteString) -- | -- Label is a tagged union of all possible value types that can returned by a katydid parser: -- String, Int, Uint, Double, Bool and Bytes. data Label = String Text | Int Int | Uint Word | Double Double | Bool Bool | Bytes ByteString deriving (Show, Eq, Ord, Generic, NFData) -- | -- Tree is the type class that should be implemented by a katydid parser. -- This is implemented by the Json and XML parser. class Tree a where getLabel :: a -> Label getChildren :: a -> [a]