module Text.Namelist.Types where
import Data.Complex
import Data.CaseInsensitive (CI)
import Data.Data(Data, Typeable)
data Index
= Index Int
| Range (Maybe Int) (Maybe Int) (Maybe Int)
deriving (Show, Read, Data, Typeable, Eq)
data Key
= Key (CI String)
| Indexed (CI String) [Index]
| Sub (CI String) Key
deriving (Show, Read, Data, Typeable, Eq)
data Value
= Integer Int
| Real Double
| Complex (Complex Double)
| Logical Bool
| String String
| Array [Value]
| Int :* Value
| Null
deriving (Show, Read, Data, Typeable, Eq)
data Pair = Key := Value
deriving (Show, Read, Data, Typeable, Eq)
data Group = Group (CI String) [Pair]
deriving (Show, Read, Data, Typeable, Eq)