on master help sign in
Using TH; added StringObject instances.
650912fMichael Snoyman
Data/Object/Yaml.hs+28−5
@@ -4,6 +4,7 @@
4{-# LANGUAGE DeriveDataTypeable #-}
4{-# LANGUAGE DeriveDataTypeable #-}
5{-# LANGUAGE TypeSynonymInstances #-}
5{-# LANGUAGE TypeSynonymInstances #-}
6{-# LANGUAGE CPP #-}
6{-# LANGUAGE CPP #-}
7+{-# LANGUAGE TemplateHaskell #-}
7module Data.Object.Yaml
8module Data.Object.Yaml
8 ( -- * 'YamlDoc' definition and IO
9 ( -- * 'YamlDoc' definition and IO
9 YamlDoc (..)
10 YamlDoc (..)
@@ -29,7 +30,7 @@ import Data.ByteString (ByteString)
29import qualified Data.ByteString as B
30import qualified Data.ByteString as B
30import Data.Object.Base
31import Data.Object.Base
31import Data.Object.Text
32import Data.Object.Text
32−import Data.Convertible.Text
33+import Data.Object.String
33import Data.Attempt
34import Data.Attempt
34
35
35import Data.Object.Yaml.Internal
36import Data.Object.Yaml.Internal
@@ -87,6 +88,20 @@ instance ConvertSuccess YamlScalar Text where
87instance ConvertSuccess Text YamlScalar where
88instance ConvertSuccess Text YamlScalar where
88 convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
89 convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
89
90
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+
90-- FIXME add Scalar instances
105-- FIXME add Scalar instances
91{-
106{-
92instance ConvertSuccess YamlScalar Scalar where
107instance ConvertSuccess YamlScalar Scalar where
@@ -97,6 +112,13 @@ instance ConvertSuccess Scalar YamlScalar where
97
112
98type YamlObject = Object YamlScalar YamlScalar
113type YamlObject = Object YamlScalar YamlScalar
99
114
115+$(deriveSuccessConvs ''YamlScalar ''YamlScalar
116+ [''String, ''Text]
117+ [''String, ''Text])
118+
119+$(deriveSuccessConvs ''String ''String [''YamlScalar] [''YamlScalar])
120+$(deriveSuccessConvs ''Text ''Text [''YamlScalar] [''YamlScalar])
121+
100-- Emit a YamlObject to an event stream
122-- Emit a YamlObject to an event stream
101instance ConvertSuccess YamlObject [Event] where
123instance ConvertSuccess YamlObject [Event] where
102 convertSuccess o = EventStreamStart
124 convertSuccess o = EventStreamStart
@@ -171,15 +193,16 @@ eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
171 readMap (f . ((:) (key', val))) rest'
193 readMap (f . ((:) (key', val))) rest'
172eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
194eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
173
195
174−instance ConvertSuccess YamlObject TextObject where
175− convertSuccess = mapKeysValues cs cs
176−instance ConvertSuccess TextObject YamlObject where
177− convertSuccess = mapKeysValues cs cs
178instance ConvertSuccess TextObject YamlDoc where
196instance ConvertSuccess TextObject YamlDoc where
179 convertSuccess = cs . (cs :: TextObject -> YamlObject)
197 convertSuccess = cs . (cs :: TextObject -> YamlObject)
180instance ConvertAttempt YamlDoc TextObject where
198instance ConvertAttempt YamlDoc TextObject where
181 convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
199 convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
182
200
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+
183{- FIXME
206{- FIXME
184instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
207instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
185 convertSuccess = mapKeysValues convertSuccess convertSuccess
208 convertSuccess = mapKeysValues convertSuccess convertSuccess
data-object-yaml.cabal+4−1
@@ -18,9 +18,12 @@ extra-source-files: c/helper.h,
18flag buildtests
18flag buildtests
19 description: Build the executable to run unit tests
19 description: Build the executable to run unit tests
20 default: False
20 default: False
21+flag nolib
22+ description: Skip building of the library
23+ default: False
21
24
22library
25library
23− if flag(buildtests)
26+ if flag(nolib)
24 Buildable: False
27 Buildable: False
25 else
28 else
26 Buildable: True
29 Buildable: True