@@ -2,13 +2,15 @@
2{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE MultiParamTypeClasses #-}
4{-# LANGUAGE DeriveDataTypeable #-}
4{-# LANGUAGE DeriveDataTypeable #-}
5+{-# LANGUAGE TypeSynonymInstances #-}
5module Data.Object.Yaml
6module Data.Object.Yaml
6 ( -- * The event stream
7 ( -- * The event stream
8 , Style (..)
9 , Style (..)
9 , Tag (..)
10 , Tag (..)
10 -- * 'YamlObject' definition
11 -- * 'YamlObject' definition
11− , Yaml (..)
12+ , YamlDoc (..)
12 , YamlObject
14 , YamlObject
13 -- * Performing conversions
15 -- * Performing conversions
14 , eventsToYamlObject
16 , eventsToYamlObject
@@ -89,33 +91,35 @@ instance ConvertSuccess [Char] Tag where
89 convertSuccess "" = NoTag
91 convertSuccess "" = NoTag
90 convertSuccess s = UriTag s
92 convertSuccess s = UriTag s
92−data Yaml = Yaml
94+newtype YamlDoc = YamlDoc { unYamlDoc :: ByteString }
96+data YamlScalar = YamlScalar
93 { value :: ByteString
97 { value :: ByteString
94 , tag :: Tag
98 , tag :: Tag
95 , style :: Style
99 , style :: Style
97 deriving (Show, Eq)
101 deriving (Show, Eq)
98−instance ConvertSuccess Yaml Event where
102+instance ConvertSuccess YamlScalar Event where
99− convertSuccess (Yaml v t s) = EventScalar v (convertSuccess t) s
103+ convertSuccess (YamlScalar v t s) = EventScalar v (convertSuccess t) s
101−instance ConvertSuccess Yaml [Char] where
105+instance ConvertSuccess YamlScalar [Char] where
102 convertSuccess = convertSuccess . value
106 convertSuccess = convertSuccess . value
103−instance ConvertSuccess [Char] Yaml where
107+instance ConvertSuccess [Char] YamlScalar where
104− convertSuccess t = Yaml (convertSuccess t) NoTag Any
108+ convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
106−instance ConvertSuccess Yaml Text where
110+instance ConvertSuccess YamlScalar Text where
107 convertSuccess = convertSuccess . value
111 convertSuccess = convertSuccess . value
108−instance ConvertSuccess Text Yaml where
112+instance ConvertSuccess Text YamlScalar where
109− convertSuccess t = Yaml (convertSuccess t) NoTag Any
113+ convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
111-- FIXME the following are incredibly stupid conversions which ignore tag
115-- FIXME the following are incredibly stupid conversions which ignore tag
112-- and style information.
116-- and style information.
113−instance ConvertSuccess Yaml Scalar where
117+instance ConvertSuccess YamlScalar Scalar where
114 convertSuccess = Text . convertSuccess
118 convertSuccess = Text . convertSuccess
115−instance ConvertSuccess Scalar Yaml where
119+instance ConvertSuccess Scalar YamlScalar where
116 convertSuccess s = convertSuccess (convertSuccess s :: Text)
120 convertSuccess s = convertSuccess (convertSuccess s :: Text)
118−type YamlObject = Object Yaml Yaml
122+type YamlObject = Object YamlScalar YamlScalar
120data YamlException =
124data YamlException =
121 YamlParserException
125 YamlParserException
@@ -134,7 +138,7 @@ data YamlException =
134instance Exception YamlException
138instance Exception YamlException
136-- Emit a YamlObject to an event stream
140-- Emit a YamlObject to an event stream
137−instance ConvertSuccess (Object Yaml Yaml) [Event] where
141+instance ConvertSuccess YamlObject [Event] where
138 convertSuccess o = EventStreamStart
142 convertSuccess o = EventStreamStart
139 : EventDocumentStart
143 : EventDocumentStart
140 : helper o [EventDocumentEnd, EventStreamEnd] where
144 : helper o [EventDocumentEnd, EventStreamEnd] where
@@ -146,7 +150,7 @@ instance ConvertSuccess (Object Yaml Yaml) [Event] where
146 helper (Mapping pairs) rest =
150 helper (Mapping pairs) rest =
147 EventMappingStart
151 EventMappingStart
148 : foldr ($) (EventMappingEnd : rest) (map helperPairs pairs)
152 : foldr ($) (EventMappingEnd : rest) (map helperPairs pairs)
149− helperPairs :: (Yaml, YamlObject) -> [Event] -> [Event]
153+ helperPairs :: (YamlScalar, YamlObject) -> [Event] -> [Event]
150 helperPairs (k, v) rest = convertSuccess k : helper v rest
154 helperPairs (k, v) rest = convertSuccess k : helper v rest
152-- Parse a YamlObject from an event stream
156-- Parse a YamlObject from an event stream
@@ -166,7 +170,7 @@ eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
166 -> m (YamlObject, [Event])
170 -> m (YamlObject, [Event])
167 h2 [] = failure YamlPrematureEventStreamEnd
171 h2 [] = failure YamlPrematureEventStreamEnd
168 h2 (EventScalar v t s:rest) =
172 h2 (EventScalar v t s:rest) =
169− return (Scalar $ Yaml v (convertSuccess t) s, rest)
173+ return (Scalar $ YamlScalar v (convertSuccess t) s, rest)
170 h2 (EventSequenceStart:es) = do
174 h2 (EventSequenceStart:es) = do
171 (yos, rest) <- readSeq id es
175 (yos, rest) <- readSeq id es
172 return (Sequence yos, rest)
176 return (Sequence yos, rest)
@@ -186,9 +190,9 @@ eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
186 readSeq (f . ((:) next)) rest
190 readSeq (f . ((:) next)) rest
188 readMap :: MonadFailure YamlException m
192 readMap :: MonadFailure YamlException m
189− => ([(Yaml, YamlObject)] -> [(Yaml, YamlObject)])
193+ => ([(YamlScalar, YamlObject)] -> [(YamlScalar, YamlObject)])
190 -> [Event]
194 -> [Event]
191− -> m ([(Yaml, YamlObject)], [Event])
195+ -> m ([(YamlScalar, YamlObject)], [Event])
192 readMap _ [] = failure YamlPrematureEventStreamEnd
196 readMap _ [] = failure YamlPrematureEventStreamEnd
193 readMap f (EventMappingEnd:rest) = return (f [], rest)
197 readMap f (EventMappingEnd:rest) = return (f [], rest)
194 readMap f es = do
198 readMap f es = do
@@ -200,12 +204,12 @@ eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
200 readMap (f . ((:) (key', val))) rest'
204 readMap (f . ((:) (key', val))) rest'
201eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
205eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
203−instance ConvertSuccess (Object Yaml Yaml) (Object Text Text) where
207+instance ConvertSuccess (Object YamlScalar YamlScalar) (Object Text Text) where
204 convertSuccess = mapKeysValues convertSuccess convertSuccess
208 convertSuccess = mapKeysValues convertSuccess convertSuccess
205−instance ConvertSuccess (Object Text Text) (Object Yaml Yaml) where
209+instance ConvertSuccess (Object Text Text) (Object YamlScalar YamlScalar) where
206 convertSuccess = mapKeysValues convertSuccess convertSuccess
210 convertSuccess = mapKeysValues convertSuccess convertSuccess
208−instance ConvertSuccess (Object Yaml Yaml) (Object String Scalar) where
212+instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
209 convertSuccess = mapKeysValues convertSuccess convertSuccess
213 convertSuccess = mapKeysValues convertSuccess convertSuccess
210−instance ConvertSuccess (Object String Scalar) (Object Yaml Yaml) where
214+instance ConvertSuccess (Object String Scalar) (Object YamlScalar YamlScalar) where
211 convertSuccess = mapKeysValues convertSuccess convertSuccess
215 convertSuccess = mapKeysValues convertSuccess convertSuccess