@@ -4,6 +4,7 @@
44{-# LANGUAGE DeriveDataTypeable #-}
55{-# LANGUAGE TypeSynonymInstances #-}
66{-# LANGUAGE CPP #-}
7+{-# LANGUAGE TemplateHaskell #-}
78module Data.Object.Yaml
89 ( -- * 'YamlDoc' definition and IO
910 YamlDoc (..)
@@ -29,7 +30,7 @@ import Data.ByteString (ByteString)
2930import qualified Data.ByteString as B
3031import Data.Object.Base
3132import Data.Object.Text
32−import Data.Convertible.Text
33+import Data.Object.String
3334import Data.Attempt
3435
3536import Data.Object.Yaml.Internal
@@ -87,6 +88,20 @@ instance ConvertSuccess YamlScalar Text where
8788instance ConvertSuccess Text YamlScalar where
8889 convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
8990
91+instance ConvertSuccess YamlScalar ByteString where
92+ convertSuccess = value
93+instance ConvertSuccess ByteString YamlScalar where
94+ convertSuccess t = YamlScalar t NoTag Any
95+
96+$(deriveAttempts
97+ [ (''String, ''YamlScalar)
98+ , (''YamlScalar, ''String)
99+ , (''ByteString, ''YamlScalar)
100+ , (''YamlScalar, ''ByteString)
101+ , (''Text, ''YamlScalar)
102+ , (''YamlScalar, ''Text)
103+ ])
104+
90105-- FIXME add Scalar instances
91106{-
92107instance ConvertSuccess YamlScalar Scalar where
@@ -97,6 +112,13 @@ instance ConvertSuccess Scalar YamlScalar where
97112
98113type YamlObject = Object YamlScalar YamlScalar
99114
115+$(deriveSuccessConvs ''YamlScalar ''YamlScalar
116+ [''String, ''Text]
117+ [''String, ''Text])
118+
119+$(deriveSuccessConvs ''String ''String [''YamlScalar] [''YamlScalar])
120+$(deriveSuccessConvs ''Text ''Text [''YamlScalar] [''YamlScalar])
121+
100122-- Emit a YamlObject to an event stream
101123instance ConvertSuccess YamlObject [Event] where
102124 convertSuccess o = EventStreamStart
@@ -171,15 +193,16 @@ eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
171193 readMap (f . ((:) (key', val))) rest'
172194eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
173195
174−instance ConvertSuccess YamlObject TextObject where
175− convertSuccess = mapKeysValues cs cs
176−instance ConvertSuccess TextObject YamlObject where
177− convertSuccess = mapKeysValues cs cs
178196instance ConvertSuccess TextObject YamlDoc where
179197 convertSuccess = cs . (cs :: TextObject -> YamlObject)
180198instance ConvertAttempt YamlDoc TextObject where
181199 convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
182200
201+instance ConvertSuccess StringObject YamlDoc where
202+ convertSuccess = cs . (cs :: StringObject -> YamlObject)
203+instance ConvertAttempt YamlDoc StringObject where
204+ convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
205+
183206{- FIXME
184207instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
185208 convertSuccess = mapKeysValues convertSuccess convertSuccess