tomland-0.3: src/Toml/Edsl.hs
{- | This module introduces EDSL for manually specifying 'TOML' data types.
__Example:__
@
exampleToml :: TOML
exampleToml = mkToml $ do
"key1" =: 1
"key2" =: Bool True
table "tableName" $
"tableKey" =: Array ["Oh", "Hi", "Mark"]
@
-}
module Toml.Edsl
( mkToml
, (=:)
, table
) where
import Control.Monad.State (State, execState, modify)
import Toml.PrefixTree (Key)
import Toml.Type (TOML (..), Value, insertKeyVal, insertTable)
type TDSL = State TOML ()
-- | Creates 'TOML' from the 'TDSL'.
mkToml :: TDSL -> TOML
mkToml env = execState env mempty
-- | Adds key-value pair to the 'TDSL'.
(=:) :: Key -> Value a -> TDSL
(=:) k v = modify $ insertKeyVal k v
-- | Adds table to the 'TDSL'.
table :: Key -> TDSL -> TDSL
table k = modify . insertTable k . mkToml