{- |
Copyright: (c) 2018-2020 Kowainik
SPDX-License-Identifier: MPL-2.0
Maintainer: Kowainik <xrom.xkov@gmail.com>

Core types for TOML AST.
-}

module Toml.Type
    ( -- $toml
      module Toml.Type.TOML

--      -- $edsl
--    , module Toml.Type.Edsl
--    Edsl.table conflicts with Codec.table

      -- $printer
    , module Toml.Type.Printer
      -- $prefix
    , module Toml.Type.PrefixTree
      -- $key
    , module Toml.Type.Key
      -- $uvalue
    , module Toml.Type.UValue
      -- $value
    , module Toml.Type.Value
      -- $anyvalue
    , module Toml.Type.AnyValue
    ) where

import Toml.Type.AnyValue
-- import Toml.Type.Edsl
import Toml.Type.Key
import Toml.Type.PrefixTree
import Toml.Type.Printer
import Toml.Type.TOML
import Toml.Type.UValue
import Toml.Type.Value

{- $toml
Main TOML AST data type. Text is converted to 'TOML' first. All codecs
work with the 'TOML' type instead of raw text.
-}

-- {- $eDSL
-- eDSL for type-safe construction of the 'TOML' values.
-- -}

{- $printer
Pretty-printer for 'TOML'.
-}

{- $prefix
'PrefixMap' and 'PrefixTree' types that help representing 'TOML' AST.
-}

{- $key
Key in key-value pairs and table names. Also 'Key' in 'PrefixMap'.
-}

{- $uvalue
Untyped value obtained directly from parsing.
-}

{- $value
Typed 'Value'. Result of type-checking 'UValue'.
-}

{- $anyvalue
Existential wrapper around 'Value' to be able to store 'Value's of
different types inside lists or other containers like
'Data.Map.Strict.Map' or 'Data.HashMap.Strict.HashMap'.
-}