on master help sign in
Switched to lazy bytestrings
commitc96e3ca094e8cbb34d41ea36cbe83a32937c036d authorMichael Snoyman <michael@snoyman.com> dateThu 1 Oct 2009, 16:02 (17 years ago) parent86ad7eb
2 files changed+9−6
Text/Yaml.hs+8−5 yaml.cabal+1−1
Text/Yaml.hs+8−5
@@ -23,9 +23,11 @@ module Text.Yaml
2323import Prelude hiding (readList)
2424import Text.Libyaml
2525import qualified Data.ByteString as B
26+import qualified Data.ByteString.Lazy as BL
2627import Data.ByteString.Class
2728import Data.Object
2829import System.IO.Unsafe
30+import Control.Arrow (first)
2931
3032encode :: (StrictByteString bs, ToObject o) => o -> bs
3133encode = unsafePerformIO . encode'
@@ -59,14 +61,14 @@ objectToEvents y = concat
5961 , writeSingle y
6062 , [EventDocumentEnd, EventStreamEnd]] where
6163 writeSingle :: Object -> [Event]
62− writeSingle (Scalar bs) = [EventScalar bs]
64+ writeSingle (Scalar bs) = [EventScalar $ fromLazyByteString bs]
6365 writeSingle (Sequence ys) =
6466 (EventSequenceStart : concatMap writeSingle ys)
6567 ++ [EventSequenceEnd]
6668 writeSingle (Mapping pairs) =
6769 EventMappingStart : concatMap writePair pairs ++ [EventMappingEnd]
68− writePair :: (B.ByteString, Object) -> [Event]
69− writePair (k, v) = EventScalar k : writeSingle v
70+ writePair :: (BL.ByteString, Object) -> [Event]
71+ writePair (k, v) = EventScalar (fromLazyByteString k) : writeSingle v
7072
7173eventsToObject :: [Event] -> Object
7274eventsToObject = fst . readSingle . dropWhile isIgnored where
@@ -79,7 +81,7 @@ eventsToObject = fst . readSingle . dropWhile isIgnored where
7981 isIgnored _ = True
8082 readSingle :: [Event] -> (Object, [Event])
8183 readSingle [] = error "readSingle: no more events"
82− readSingle (EventScalar bs:rest) = (Scalar bs, rest)
84+ readSingle (EventScalar bs:rest) = (Scalar $ toLazyByteString bs, rest)
8385 readSingle (EventSequenceStart:rest) = readList [] rest
8486 readSingle (EventMappingStart:rest) = readMap [] rest
8587 readSingle (x:_) = error $ "readSingle: " ++ show x
@@ -90,7 +92,8 @@ eventsToObject = fst . readSingle . dropWhile isIgnored where
9092 let (next, rest) = readSingle events
9193 in readList (next : nodes) rest
9294 readMap :: [(B.ByteString, Object)] -> [Event] -> (Object, [Event])
93− readMap pairs (EventMappingEnd:rest) = (Mapping $ reverse pairs, rest)
95+ readMap pairs (EventMappingEnd:rest) =
96+ (Mapping $ map (first toLazyByteString) $ reverse pairs, rest)
9497 readMap pairs (EventScalar bs:events) =
9598 let (next, rest) = readSingle events
9699 in readMap ((fromStrictByteString bs, next) : pairs) rest
yaml.cabal+1−1
@@ -1,5 +1,5 @@
11name: yaml
2−version: 0.0.3
2+version: 0.0.4
33license: BSD3
44license-file: LICENSE
55author: Michael Snoyman <michael@snoyman.com>