{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}
-- | NOTE: This module is a highly experimental preview release. It may change
-- drastically, or be entirely removed, in a future release.
module Data.Yaml.Builder
    ( YamlBuilder (..)
    , ToYaml (..)
    , mapping
    , namedMapping
    , maybeNamedMapping
    , mappingComplex
    , namedMappingComplex
    , maybeNamedMappingComplex
    , array
    , namedArray
    , maybeNamedArray
    , string
    , namedString
    , maybeNamedString
    , bool
    , namedBool
    , maybeNamedBool
    , null
    , namedNull
    , maybeNamedNull
    , scientific
    , namedScientific
    , maybeNamedScientific
    , alias
    , number
    , toByteString
    , toByteStringWith
    , writeYamlFile
    , writeYamlFileWith
    , (.=)
    , FormatOptions
    , setWidth
    ) where

import Prelude hiding (null)

#if MIN_VERSION_aeson(1,0,0)
import Data.Aeson.Text (encodeToTextBuilder)
#else
import Data.Aeson.Encode (encodeToTextBuilder)
#endif
import Data.Aeson.Types (Value(..))
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as S8
import Data.Scientific (Scientific)
import Data.Text (Text, unpack)
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Data.Text.Lazy as TL
import Data.Text.Lazy.Builder (toLazyText)
import System.IO.Unsafe (unsafePerformIO)
import Control.Monad.IO.Class (MonadIO)

import Data.Yaml.Internal
import Text.Libyaml

import Control.Exception.Safe

import Streamly.Data.Stream (Stream)
import qualified Streamly.Data.Stream as S

(.=) :: ToYaml a => Text -> a -> (Text, YamlBuilder)
Text
k .= :: forall a. ToYaml a => Text -> a -> (Text, YamlBuilder)
.= a
v = (Text
k, a -> YamlBuilder
forall a. ToYaml a => a -> YamlBuilder
toYaml a
v)

newtype YamlBuilder = YamlBuilder { YamlBuilder -> [Event] -> [Event]
unYamlBuilder :: [Event] -> [Event] }

class ToYaml a where
    toYaml :: a -> YamlBuilder
instance ToYaml YamlBuilder where
    toYaml :: YamlBuilder -> YamlBuilder
toYaml = YamlBuilder -> YamlBuilder
forall a. a -> a
id
instance (ToYaml a, ToYaml b) => ToYaml [(a, b)] where
    toYaml :: [(a, b)] -> YamlBuilder
toYaml = [(YamlBuilder, YamlBuilder)] -> YamlBuilder
mappingComplex ([(YamlBuilder, YamlBuilder)] -> YamlBuilder)
-> ([(a, b)] -> [(YamlBuilder, YamlBuilder)])
-> [(a, b)]
-> YamlBuilder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((a, b) -> (YamlBuilder, YamlBuilder))
-> [(a, b)] -> [(YamlBuilder, YamlBuilder)]
forall a b. (a -> b) -> [a] -> [b]
map (\(a
k, b
v) -> (a -> YamlBuilder
forall a. ToYaml a => a -> YamlBuilder
toYaml a
k, b -> YamlBuilder
forall a. ToYaml a => a -> YamlBuilder
toYaml b
v))
instance ToYaml a => ToYaml [a] where
    toYaml :: [a] -> YamlBuilder
toYaml = [YamlBuilder] -> YamlBuilder
array ([YamlBuilder] -> YamlBuilder)
-> ([a] -> [YamlBuilder]) -> [a] -> YamlBuilder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> YamlBuilder) -> [a] -> [YamlBuilder]
forall a b. (a -> b) -> [a] -> [b]
map a -> YamlBuilder
forall a. ToYaml a => a -> YamlBuilder
toYaml
instance ToYaml Text where
    toYaml :: Text -> YamlBuilder
toYaml = Text -> YamlBuilder
string
instance {-# OVERLAPPING #-} ToYaml String where
    toYaml :: String -> YamlBuilder
toYaml = Text -> YamlBuilder
string (Text -> YamlBuilder) -> (String -> Text) -> String -> YamlBuilder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack
instance ToYaml Int where
    toYaml :: Int -> YamlBuilder
toYaml Int
i = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (ByteString -> Tag -> Style -> Anchor -> Event
EventScalar (String -> ByteString
S8.pack (String -> ByteString) -> String -> ByteString
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
i) Tag
NoTag Style
PlainNoTag Anchor
forall a. Maybe a
NothingEvent -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)
instance ToYaml Double where
    toYaml :: Double -> YamlBuilder
toYaml Double
i = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (ByteString -> Tag -> Style -> Anchor -> Event
EventScalar (String -> ByteString
S8.pack (String -> ByteString) -> String -> ByteString
forall a b. (a -> b) -> a -> b
$ Double -> String
forall a. Show a => a -> String
show Double
i) Tag
NoTag Style
PlainNoTag Anchor
forall a. Maybe a
NothingEvent -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)
instance ToYaml Scientific where
    toYaml :: Scientific -> YamlBuilder
toYaml = Scientific -> YamlBuilder
scientific
instance ToYaml Bool where
    toYaml :: Bool -> YamlBuilder
toYaml = Bool -> YamlBuilder
bool
instance ToYaml a => ToYaml (Maybe a) where
    toYaml :: Maybe a -> YamlBuilder
toYaml = YamlBuilder -> (a -> YamlBuilder) -> Maybe a -> YamlBuilder
forall b a. b -> (a -> b) -> Maybe a -> b
maybe YamlBuilder
null a -> YamlBuilder
forall a. ToYaml a => a -> YamlBuilder
toYaml

-- |
-- @since 0.10.3.0
maybeNamedMapping :: Maybe Text -> [(Text, YamlBuilder)] -> YamlBuilder
maybeNamedMapping :: Maybe Text -> [(Text, YamlBuilder)] -> YamlBuilder
maybeNamedMapping Maybe Text
anchor [(Text, YamlBuilder)]
pairs = Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
maybeNamedMappingComplex Maybe Text
anchor [(YamlBuilder, YamlBuilder)]
complexPairs
  where
    complexPairs :: [(YamlBuilder, YamlBuilder)]
complexPairs = ((Text, YamlBuilder) -> (YamlBuilder, YamlBuilder))
-> [(Text, YamlBuilder)] -> [(YamlBuilder, YamlBuilder)]
forall a b. (a -> b) -> [a] -> [b]
map (\(Text
k, YamlBuilder
v) -> (Text -> YamlBuilder
string Text
k, YamlBuilder
v)) [(Text, YamlBuilder)]
pairs

-- |
-- @since 0.8.7
mapping :: [(Text, YamlBuilder)] -> YamlBuilder
mapping :: [(Text, YamlBuilder)] -> YamlBuilder
mapping = Maybe Text -> [(Text, YamlBuilder)] -> YamlBuilder
maybeNamedMapping Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.10.3.0
namedMapping :: Text -> [(Text, YamlBuilder)] -> YamlBuilder
namedMapping :: Text -> [(Text, YamlBuilder)] -> YamlBuilder
namedMapping Text
name = Maybe Text -> [(Text, YamlBuilder)] -> YamlBuilder
maybeNamedMapping (Maybe Text -> [(Text, YamlBuilder)] -> YamlBuilder)
-> Maybe Text -> [(Text, YamlBuilder)] -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- |
-- @since 0.11.2.0
maybeNamedMappingComplex :: Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
maybeNamedMappingComplex :: Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
maybeNamedMappingComplex Maybe Text
anchor [(YamlBuilder, YamlBuilder)]
pairs = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (([Event] -> [Event]) -> YamlBuilder)
-> ([Event] -> [Event]) -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ \[Event]
rest ->
    Tag -> MappingStyle -> Anchor -> Event
EventMappingStart Tag
NoTag MappingStyle
AnyMapping (Text -> String
unpack (Text -> String) -> Maybe Text -> Anchor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
anchor) Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
: ((YamlBuilder, YamlBuilder) -> [Event] -> [Event])
-> [Event] -> [(YamlBuilder, YamlBuilder)] -> [Event]
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (YamlBuilder, YamlBuilder) -> [Event] -> [Event]
addPair (Event
EventMappingEnd Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
: [Event]
rest) [(YamlBuilder, YamlBuilder)]
pairs
  where
    addPair :: (YamlBuilder, YamlBuilder) -> [Event] -> [Event]
addPair (YamlBuilder [Event] -> [Event]
key, YamlBuilder [Event] -> [Event]
value) [Event]
after = [Event] -> [Event]
key ([Event] -> [Event]) -> [Event] -> [Event]
forall a b. (a -> b) -> a -> b
$ [Event] -> [Event]
value [Event]
after

-- |
-- @since 0.11.2.0
mappingComplex :: [(YamlBuilder, YamlBuilder)] -> YamlBuilder
mappingComplex :: [(YamlBuilder, YamlBuilder)] -> YamlBuilder
mappingComplex = Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
maybeNamedMappingComplex Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.11.2.0
namedMappingComplex :: Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
namedMappingComplex :: Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
namedMappingComplex Text
name = Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
maybeNamedMappingComplex (Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder)
-> Maybe Text -> [(YamlBuilder, YamlBuilder)] -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- |
-- @since 0.10.3.0
maybeNamedArray :: Maybe Text -> [YamlBuilder] -> YamlBuilder
maybeNamedArray :: Maybe Text -> [YamlBuilder] -> YamlBuilder
maybeNamedArray Maybe Text
anchor [YamlBuilder]
bs =
    ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (([Event] -> [Event]) -> YamlBuilder)
-> ([Event] -> [Event]) -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ (Tag -> SequenceStyle -> Anchor -> Event
EventSequenceStart Tag
NoTag SequenceStyle
AnySequence (Text -> String
unpack (Text -> String) -> Maybe Text -> Anchor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
anchor)Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:) ([Event] -> [Event]) -> ([Event] -> [Event]) -> [Event] -> [Event]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Event] -> [YamlBuilder] -> [Event])
-> [YamlBuilder] -> [Event] -> [Event]
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((YamlBuilder -> [Event] -> [Event])
-> [Event] -> [YamlBuilder] -> [Event]
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr YamlBuilder -> [Event] -> [Event]
go) [YamlBuilder]
bs ([Event] -> [Event]) -> ([Event] -> [Event]) -> [Event] -> [Event]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Event
EventSequenceEndEvent -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)
  where
    go :: YamlBuilder -> [Event] -> [Event]
go (YamlBuilder [Event] -> [Event]
b) = [Event] -> [Event]
b

-- |
-- @since 0.8.7
array :: [YamlBuilder] -> YamlBuilder
array :: [YamlBuilder] -> YamlBuilder
array = Maybe Text -> [YamlBuilder] -> YamlBuilder
maybeNamedArray Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.10.3.0
namedArray :: Text -> [YamlBuilder] -> YamlBuilder
namedArray :: Text -> [YamlBuilder] -> YamlBuilder
namedArray Text
name = Maybe Text -> [YamlBuilder] -> YamlBuilder
maybeNamedArray (Maybe Text -> [YamlBuilder] -> YamlBuilder)
-> Maybe Text -> [YamlBuilder] -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- |
-- @since 0.10.3.0
maybeNamedString :: Maybe Text -> Text -> YamlBuilder
maybeNamedString :: Maybe Text -> Text -> YamlBuilder
maybeNamedString Maybe Text
anchor Text
s = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (StringStyle -> Maybe Text -> Text -> Event
stringScalar StringStyle
defaultStringStyle Maybe Text
anchor Text
s Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)

-- |
-- @since 0.8.7
string :: Text -> YamlBuilder
string :: Text -> YamlBuilder
string = Maybe Text -> Text -> YamlBuilder
maybeNamedString Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.10.3.0
namedString :: Text -> Text -> YamlBuilder
namedString :: Text -> Text -> YamlBuilder
namedString Text
name = Maybe Text -> Text -> YamlBuilder
maybeNamedString (Maybe Text -> Text -> YamlBuilder)
-> Maybe Text -> Text -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- Use aeson's implementation which gets rid of annoying decimal points
-- |
-- @since 0.10.3.0
maybeNamedScientific :: Maybe Text -> Scientific -> YamlBuilder
maybeNamedScientific :: Maybe Text -> Scientific -> YamlBuilder
maybeNamedScientific Maybe Text
anchor Scientific
n = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (ByteString -> Tag -> Style -> Anchor -> Event
EventScalar (Text -> ByteString
TE.encodeUtf8 (Text -> ByteString) -> Text -> ByteString
forall a b. (a -> b) -> a -> b
$ Text -> Text
TL.toStrict (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Builder -> Text
toLazyText (Builder -> Text) -> Builder -> Text
forall a b. (a -> b) -> a -> b
$ Value -> Builder
forall a. ToJSON a => a -> Builder
encodeToTextBuilder (Scientific -> Value
Number Scientific
n)) Tag
NoTag Style
PlainNoTag (Text -> String
unpack (Text -> String) -> Maybe Text -> Anchor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
anchor) Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)

-- |
-- @since 0.8.13
scientific :: Scientific -> YamlBuilder
scientific :: Scientific -> YamlBuilder
scientific = Maybe Text -> Scientific -> YamlBuilder
maybeNamedScientific Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.10.3.0
namedScientific :: Text -> Scientific -> YamlBuilder
namedScientific :: Text -> Scientific -> YamlBuilder
namedScientific Text
name = Maybe Text -> Scientific -> YamlBuilder
maybeNamedScientific (Maybe Text -> Scientific -> YamlBuilder)
-> Maybe Text -> Scientific -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- |
-- @since 0.8.13
{-# DEPRECATED number "Use scientific" #-}
number :: Scientific -> YamlBuilder
number :: Scientific -> YamlBuilder
number = Scientific -> YamlBuilder
scientific

-- |
-- @since 0.10.3.0
maybeNamedBool :: Maybe Text -> Bool -> YamlBuilder
maybeNamedBool :: Maybe Text -> Bool -> YamlBuilder
maybeNamedBool Maybe Text
anchor Bool
True   = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (ByteString -> Tag -> Style -> Anchor -> Event
EventScalar ByteString
"true" Tag
NoTag Style
PlainNoTag (Text -> String
unpack (Text -> String) -> Maybe Text -> Anchor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
anchor) Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)
maybeNamedBool Maybe Text
anchor Bool
False  = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (ByteString -> Tag -> Style -> Anchor -> Event
EventScalar ByteString
"false" Tag
NoTag Style
PlainNoTag (Text -> String
unpack (Text -> String) -> Maybe Text -> Anchor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
anchor) Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)

-- |
-- @since 0.8.13
bool :: Bool -> YamlBuilder
bool :: Bool -> YamlBuilder
bool = Maybe Text -> Bool -> YamlBuilder
maybeNamedBool Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.10.3.0
namedBool :: Text -> Bool -> YamlBuilder
namedBool :: Text -> Bool -> YamlBuilder
namedBool Text
name = Maybe Text -> Bool -> YamlBuilder
maybeNamedBool (Maybe Text -> Bool -> YamlBuilder)
-> Maybe Text -> Bool -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- |
-- @since 0.10.3.0
maybeNamedNull :: Maybe Text -> YamlBuilder
maybeNamedNull :: Maybe Text -> YamlBuilder
maybeNamedNull Maybe Text
anchor = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (ByteString -> Tag -> Style -> Anchor -> Event
EventScalar ByteString
"null" Tag
NoTag Style
PlainNoTag (Text -> String
unpack (Text -> String) -> Maybe Text -> Anchor
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
anchor) Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)

-- |
-- @since 0.8.13
null :: YamlBuilder
null :: YamlBuilder
null = Maybe Text -> YamlBuilder
maybeNamedNull Maybe Text
forall a. Maybe a
Nothing

-- |
-- @since 0.10.3.0
namedNull :: Text -> YamlBuilder
namedNull :: Text -> YamlBuilder
namedNull Text
name = Maybe Text -> YamlBuilder
maybeNamedNull (Maybe Text -> YamlBuilder) -> Maybe Text -> YamlBuilder
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name

-- |
-- @since 0.10.3.0
alias :: Text -> YamlBuilder
alias :: Text -> YamlBuilder
alias Text
anchor = ([Event] -> [Event]) -> YamlBuilder
YamlBuilder (String -> Event
EventAlias (Text -> String
unpack Text
anchor) Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:)

toEvents :: YamlBuilder -> [Event]
toEvents :: YamlBuilder -> [Event]
toEvents (YamlBuilder [Event] -> [Event]
front) =
    Event
EventStreamStart Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
: Event
EventDocumentStart Event -> [Event] -> [Event]
forall a. a -> [a] -> [a]
: [Event] -> [Event]
front [Event
EventDocumentEnd, Event
EventStreamEnd]

toSource :: (Monad m, ToYaml a, MonadCatch m, MonadIO m, MonadMask m)
         => a
         -> Stream m Event
toSource :: forall (m :: * -> *) a.
(Monad m, ToYaml a, MonadCatch m, MonadIO m, MonadMask m) =>
a -> Stream m Event
toSource = [Event] -> Stream m Event
forall (m :: * -> *) a. Applicative m => [a] -> Stream m a
S.fromList ([Event] -> Stream m Event)
-> (a -> [Event]) -> a -> Stream m Event
forall b c a. (b -> c) -> (a -> b) -> a -> c
. YamlBuilder -> [Event]
toEvents (YamlBuilder -> [Event]) -> (a -> YamlBuilder) -> a -> [Event]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> YamlBuilder
forall a. ToYaml a => a -> YamlBuilder
toYaml

-- |
-- @since 0.8.7
toByteString :: ToYaml a => a -> ByteString
toByteString :: forall a. ToYaml a => a -> ByteString
toByteString = FormatOptions -> a -> ByteString
forall a. ToYaml a => FormatOptions -> a -> ByteString
toByteStringWith FormatOptions
defaultFormatOptions


-- |
-- @since 0.10.2.0
toByteStringWith :: ToYaml a => FormatOptions -> a -> ByteString
toByteStringWith :: forall a. ToYaml a => FormatOptions -> a -> ByteString
toByteStringWith FormatOptions
opts a
yb = IO ByteString -> ByteString
forall a. IO a -> a
unsafePerformIO (IO ByteString -> ByteString) -> IO ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$ FormatOptions -> Stream IO Event -> IO ByteString
forall (m :: * -> *).
(MonadCatch m, MonadIO m, MonadMask m) =>
FormatOptions -> Stream m Event -> m ByteString
encodeWith FormatOptions
opts (a -> Stream IO Event
forall (m :: * -> *) a.
(Monad m, ToYaml a, MonadCatch m, MonadIO m, MonadMask m) =>
a -> Stream m Event
toSource a
yb)

writeYamlFile :: ToYaml a => FilePath -> a -> IO ()
writeYamlFile :: forall a. ToYaml a => String -> a -> IO ()
writeYamlFile = FormatOptions -> String -> a -> IO ()
forall a. ToYaml a => FormatOptions -> String -> a -> IO ()
writeYamlFileWith FormatOptions
defaultFormatOptions

-- |
-- @since 0.10.2.0
writeYamlFileWith :: ToYaml a => FormatOptions -> FilePath -> a -> IO ()
writeYamlFileWith :: forall a. ToYaml a => FormatOptions -> String -> a -> IO ()
writeYamlFileWith FormatOptions
opts String
fp a
yb = FormatOptions -> String -> Stream IO Event -> IO ()
forall (m :: * -> *).
(MonadCatch m, MonadIO m, MonadMask m) =>
FormatOptions -> String -> Stream m Event -> m ()
encodeFileWith FormatOptions
opts String
fp (a -> Stream IO Event
forall (m :: * -> *) a.
(Monad m, ToYaml a, MonadCatch m, MonadIO m, MonadMask m) =>
a -> Stream m Event
toSource a
yb)