on master help sign in
Added some wrap functions
8c4d134Michael Snoyman
Text/Yaml.hs+31−1
@@ -18,15 +18,21 @@
18
18
19module Text.Yaml
19module Text.Yaml
20 (
20 (
21+ -- * Exceptions
22+ YamlException (..)
23+ ,
21 -- * Converting to/from 'TextObject's
24 -- * Converting to/from 'TextObject's
22 encodeText
25 encodeText
23 , decodeText
26 , decodeText
27+ , decodeFromText
28+ , decodeFromTextWrap
24 -- * Convert to/from 'ScalarObejct's
29 -- * Convert to/from 'ScalarObejct's
25 , encodeScalar
30 , encodeScalar
26 , decodeScalar
31 , decodeScalar
27 -- * Files
32 -- * Files
28 , encodeFile
33 , encodeFile
29 , decodeFile
34 , decodeFile
35+ , decodeFileFromTextWrap
30#if TEST
36#if TEST
31 , testSuite
37 , testSuite
32#endif
38#endif
@@ -44,7 +50,7 @@ import Control.Arrow (first)
44import Control.Monad (liftM, join)
50import Control.Monad (liftM, join)
45import Control.Monad.Trans
51import Control.Monad.Trans
46import Data.Convertible
52import Data.Convertible
47−import Control.Monad.Failure
53+import Data.Attempt
48
54
49import Data.Text.Lazy (Text)
55import Data.Text.Lazy (Text)
50import qualified Data.Text.Lazy as LT
56import qualified Data.Text.Lazy as LT
@@ -94,6 +100,21 @@ decodeText :: (ConvertSuccess a B.ByteString,
94 -> m TextObject
100 -> m TextObject
95decodeText = unsafePerformIO . decode'
101decodeText = unsafePerformIO . decode'
96
102
103+decodeFromText :: (ConvertSuccess a B.ByteString,
104+ FromObject x Text Text)
105+ => a
106+ -> Attempt x
107+decodeFromText a = decodeText a >>= fromObject
108+
109+decodeFromTextWrap :: (ConvertSuccess a B.ByteString,
110+ FromObject x Text Text,
111+ MonadFailure YamlException m,
112+ MonadFailure FromObjectException m
113+ )
114+ => a
115+ -> m x
116+decodeFromTextWrap a = decodeText a >>= fromObjectWrap
117+
97-- Scalar API
118-- Scalar API
98-- FIXME: this *should* be in a MonadFailure...
119-- FIXME: this *should* be in a MonadFailure...
99encodeScalar :: ConvertSuccess B.ByteString a
120encodeScalar :: ConvertSuccess B.ByteString a
@@ -131,6 +152,15 @@ decodeFile path = do
131ltReadFile :: FilePath -> IO Text
152ltReadFile :: FilePath -> IO Text
132ltReadFile = fmap LTE.decodeUtf8 . BL.readFile
153ltReadFile = fmap LTE.decodeUtf8 . BL.readFile
133
154
155+decodeFileFromTextWrap :: (MonadFailure YamlException m,
156+ MonadFailure FromObjectException m,
157+ MonadIO m,
158+ FromObject x Text Text
159+ )
160+ => FilePath
161+ -> m x
162+decodeFileFromTextWrap path = decodeFile path >>= fromObjectWrap
163+
134-- The real worker functions
164-- The real worker functions
135objectToEvents :: TextObject -> [Event]
165objectToEvents :: TextObject -> [Event]
136objectToEvents y = concat
166objectToEvents y = concat
yaml.cabal+2−1
@@ -33,7 +33,8 @@ library
33 transformers >= 0.1.4.0,
33 transformers >= 0.1.4.0,
34 control-monad-failure >= 0.4,
34 control-monad-failure >= 0.4,
35 text >= 0.5,
35 text >= 0.5,
36− convertible >= 1.2.0
36+ convertible >= 1.2.0,
37+ attempt >= 0.0.2
37 exposed-modules: Text.Yaml
38 exposed-modules: Text.Yaml
38 other-modules: Text.Libyaml
39 other-modules: Text.Libyaml
39 ghc-options: -Wall
40 ghc-options: -Wall