on master help sign in
Removed attempt dep and fixed encode' type
9c58aceMichael Snoyman
Text/Yaml.hs+20−10
@@ -43,8 +43,8 @@ import System.IO.Unsafe
43import Control.Arrow (first)
43import Control.Arrow (first)
44import Control.Monad (liftM, join)
44import Control.Monad (liftM, join)
45import Control.Monad.Trans
45import Control.Monad.Trans
46−import Control.Monad.Attempt
47import Data.Convertible
46import Data.Convertible
47+import Control.Monad.Failure
48
48
49import Data.Text.Lazy (Text)
49import Data.Text.Lazy (Text)
50import qualified Data.Text.Lazy as LT
50import qualified Data.Text.Lazy as LT
@@ -62,13 +62,15 @@ import Control.Arrow ((***))
62#endif
62#endif
63
63
64-- Low level, non-exported functions
64-- Low level, non-exported functions
65−encode' :: ConvertSuccess B.ByteString a
65+encode' :: (ConvertSuccess B.ByteString a, MonadFailure YamlException m)
66 => TextObject
66 => TextObject
67− -> IO a
67+ -> IO (m a)
68−encode' o =
68+encode' o = do
69 let events = objectToEvents o
69 let events = objectToEvents o
70− result = withEmitter $ flip emitEvents events
70+ result <- withEmitter $ flip emitEvents events
71+ return $ do
72+ result' <- result
71− in convertSuccess `fmap` joinAttempt result
73+ return $ convertSuccess result'
72
74
73decode' :: (ConvertSuccess a B.ByteString,
75decode' :: (ConvertSuccess a B.ByteString,
74 MonadFailure YamlException m
76 MonadFailure YamlException m
@@ -80,10 +82,11 @@ decode' bs = do
80 return $ liftM eventsToTextObject events
82 return $ liftM eventsToTextObject events
81
83
82-- Text API
84-- Text API
85+-- FIXME: this *should* be in a MonadFailure
83encodeText :: ConvertSuccess B.ByteString a
86encodeText :: ConvertSuccess B.ByteString a
84 => TextObject
87 => TextObject
85 -> a
88 -> a
86−encodeText = unsafePerformIO . encode'
89+encodeText = unsafePerformIO . join . encode'
87
90
88decodeText :: (ConvertSuccess a B.ByteString,
91decodeText :: (ConvertSuccess a B.ByteString,
89 MonadFailure YamlException m)
92 MonadFailure YamlException m)
@@ -92,10 +95,11 @@ decodeText :: (ConvertSuccess a B.ByteString,
92decodeText = unsafePerformIO . decode'
95decodeText = unsafePerformIO . decode'
93
96
94-- Scalar API
97-- Scalar API
98+-- FIXME: this *should* be in a MonadFailure...
95encodeScalar :: ConvertSuccess B.ByteString a
99encodeScalar :: ConvertSuccess B.ByteString a
96 => ScalarObject
100 => ScalarObject
97 -> a
101 -> a
98−encodeScalar = unsafePerformIO . encode' . toTextObject
102+encodeScalar = unsafePerformIO . join . encode' . toTextObject
99
103
100decodeScalar :: (ConvertSuccess a B.ByteString,
104decodeScalar :: (ConvertSuccess a B.ByteString,
101 MonadFailure YamlException m)
105 MonadFailure YamlException m)
@@ -104,8 +108,14 @@ decodeScalar :: (ConvertSuccess a B.ByteString,
104decodeScalar = liftM toScalarObject . unsafePerformIO . decode'
108decodeScalar = liftM toScalarObject . unsafePerformIO . decode'
105
109
106-- File API
110-- File API
107−encodeFile :: ToObject o Text Text => FilePath -> o -> IO ()
111+encodeFile :: (ToObject o Text Text, MonadIO m, MonadFailure YamlException m)
112+ => FilePath
113+ -> o
114+ -> m ()
115+encodeFile path o = do
108−encodeFile path o = encode' (toTextObject o) >>= ltWriteFile path
116+ content <- liftIO $ encode' $ toTextObject o
117+ content' <- content
118+ liftIO $ ltWriteFile path content'
109
119
110ltWriteFile :: FilePath -> Text -> IO ()
120ltWriteFile :: FilePath -> Text -> IO ()
111ltWriteFile fp = BL.writeFile fp . LTE.encodeUtf8
121ltWriteFile fp = BL.writeFile fp . LTE.encodeUtf8
yaml.cabal−1
@@ -29,7 +29,6 @@ library
29 bytestring >= 0.9.1.4 && < 1,
29 bytestring >= 0.9.1.4 && < 1,
30 haskell98,
30 haskell98,
31 time,
31 time,
32− attempt >= 0.0.2,
33 safe-failure,
32 safe-failure,
34 transformers >= 0.1.4.0,
33 transformers >= 0.1.4.0,
35 control-monad-failure >= 0.4,
34 control-monad-failure >= 0.4,