toml-parser-2.0.0.0: src/Toml/Syntax/Types.hs
{-|
Module : Toml.Syntax.Types
Description : Raw expressions from a parsed TOML file
Copyright : (c) Eric Mertens, 2023
License : ISC
Maintainer : emertens@gmail.com
This module provides a raw representation of TOML files as
a list of table definitions and key-value assignments.
These values use the raw dotted keys and have no detection
for overlapping assignments.
Further processing will happen in the "Semantics" module.
-}
module Toml.Syntax.Types (
Key,
Expr(..),
Val(..),
SectionKind(..),
) where
import Data.List.NonEmpty (NonEmpty)
import Data.Text (Text)
import Data.Time (Day, LocalTime, TimeOfDay, ZonedTime)
-- | Non-empty sequence of dotted simple keys
type Key a = NonEmpty (a, Text)
-- | Headers and assignments corresponding to lines of a TOML file
data Expr a
= KeyValExpr (Key a) (Val a) -- ^ key value assignment: @key = value@
| TableExpr (Key a) -- ^ table: @[key]@
| ArrayTableExpr (Key a) -- ^ array of tables: @[[key]]@
deriving (Read, Show)
-- | Unvalidated TOML values. Table are represented as a list of
-- assignments rather than as resolved maps.
data Val a
= ValInteger a Integer
| ValFloat a Double
| ValArray a [Val a]
| ValTable a [(Key a, Val a)]
| ValBool a Bool
| ValString a Text
| ValTimeOfDay a TimeOfDay
| ValZonedTime a ZonedTime
| ValLocalTime a LocalTime
| ValDay a Day
deriving (Read, Show)
-- | Kinds of table headers
data SectionKind
= TableKind -- ^ [table]
| ArrayTableKind -- ^ [[array of tables]]
deriving (Read, Show, Eq)