on master help sign in
Support all Aeson values
90dd080Michael Snoyman
Data/Yaml.hs+8−2
@@ -5,6 +5,7 @@
5{-# LANGUAGE MultiParamTypeClasses #-}
5{-# LANGUAGE MultiParamTypeClasses #-}
6{-# LANGUAGE PatternGuards #-}
6{-# LANGUAGE PatternGuards #-}
7{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
8+{-# LANGUAGE OverloadedStrings #-}
8module Data.Yaml
9module Data.Yaml
9 ( -- * Types
10 ( -- * Types
10 Value (..)
11 Value (..)
@@ -25,6 +26,7 @@ import Data.Aeson (Value (..), ToJSON (..), FromJSON (..), object)
25import Data.Aeson.Types (Pair, parseMaybe)
26import Data.Aeson.Types (Pair, parseMaybe)
26import Text.Libyaml hiding (encode, decode, encodeFile, decodeFile)
27import Text.Libyaml hiding (encode, decode, encodeFile, decodeFile)
27import Data.ByteString (ByteString)
28import Data.ByteString (ByteString)
29+import qualified Data.ByteString.Char8 as S8
28import qualified Data.Map as Map
30import qualified Data.Map as Map
29import System.IO.Unsafe (unsafePerformIO)
31import System.IO.Unsafe (unsafePerformIO)
30import Control.Exception (try, throwIO, fromException, Exception)
32import Control.Exception (try, throwIO, fromException, Exception)
@@ -72,11 +74,15 @@ objToEvents' (Array list) rest =
72objToEvents' (Object pairs) rest =
74objToEvents' (Object pairs) rest =
73 EventMappingStart Nothing
75 EventMappingStart Nothing
74 : foldr ($) (EventMappingEnd : rest) (map pairToEvents $ M.toList pairs)
76 : foldr ($) (EventMappingEnd : rest) (map pairToEvents $ M.toList pairs)
75−objToEvents' (String s) rest = EventScalar (encodeUtf8 s) StrTag Any Nothing : rest
77+objToEvents' (String s) rest = EventScalar (encodeUtf8 s) NoTag Any Nothing : rest
78+objToEvents' Null rest = EventScalar "null" NoTag Literal Nothing : rest
79+objToEvents' (Bool True) rest = EventScalar "true" NoTag Literal Nothing : rest
80+objToEvents' (Bool False) rest = EventScalar "false" NoTag Literal Nothing : rest
81+objToEvents' (Number n) rest = EventScalar (S8.pack $ show n) NoTag Literal Nothing : rest
76
82
77pairToEvents :: Pair -> [Y.Event] -> [Y.Event]
83pairToEvents :: Pair -> [Y.Event] -> [Y.Event]
78pairToEvents (k, v) rest =
84pairToEvents (k, v) rest =
79− EventScalar (encodeUtf8 k) StrTag Any Nothing
85+ EventScalar (encodeUtf8 k) NoTag Any Nothing
80 : objToEvents' v rest
86 : objToEvents' v rest
81
87
82-- Parsing
88-- Parsing