on master help sign in
Initial conversion to simple libyaml binding
7ab425aMichael Snoyman
Data/Object/Yaml.hsdeleted−319
@@ -1,319 +0,0 @@
1−{-# LANGUAGE FlexibleInstances #-}
2−{-# LANGUAGE FlexibleContexts #-}
3−{-# LANGUAGE MultiParamTypeClasses #-}
4−{-# LANGUAGE DeriveDataTypeable #-}
5−{-# LANGUAGE TypeSynonymInstances #-}
6−{-# LANGUAGE CPP #-}
7−{-# LANGUAGE TemplateHaskell #-}
8−module Data.Object.Yaml
9− ( -- * 'YamlDoc' definition and IO
10− YamlDoc (..)
11− , readYamlDoc
12− , writeYamlDoc
13− -- * Reading directly from files
14− , readYamlObject
15− -- * 'YamlObject' definition
16− , YamlScalar (..)
17− , Tag (..)
18− , Style (..)
19− , YamlObject
20− -- * Performing conversions
21− , eventsToYamlObject
22− -- * Exceptions
23− , YamlException (..)
24− -- * Re-export
25− , module Data.Object.Base
26−#if TEST
27− , testSuite
28−#endif
29− ) where
30−
31−import Data.ByteString (ByteString)
32−import qualified Data.ByteString as B
33−import Data.Object.Base
34−import Data.Object.Text
35−import Data.Object.String
36−import Data.Attempt
37−
38−import Data.Object.Yaml.Internal
39−import Data.Object.Yaml.Lib
40−import Control.Monad ((<=<), join)
41−import System.IO.Unsafe
42−
43−#if TEST
44−import Test.Framework (testGroup, Test)
45−import Test.Framework.Providers.HUnit
46−import Test.Framework.Providers.QuickCheck (testProperty)
47−import Test.HUnit hiding (Test, path)
48−import Test.QuickCheck
49−
50−import Control.Monad (replicateM)
51−import qualified Data.ByteString.Lazy as BL
52−import Control.Arrow ((***))
53−#endif
54−
55−newtype YamlDoc = YamlDoc { unYamlDoc :: ByteString }
56−instance ConvertSuccess [Event] YamlDoc where
57− -- Note: the join here will swallow up 'YamlException's.
58− -- However, these should never occur, as that would imply an error
59− -- in the C library or bindings.
60− convertSuccess = YamlDoc . unsafePerformIO . join . encode
61−instance ConvertAttempt YamlDoc [Event] where
62− convertAttempt = unsafePerformIO . decode . unYamlDoc
63−
64−readYamlDoc :: FilePath -> IO YamlDoc
65−readYamlDoc = fmap YamlDoc . B.readFile
66−
67−writeYamlDoc :: FilePath -> YamlDoc -> IO ()
68−writeYamlDoc fp = B.writeFile fp . unYamlDoc
69−
70−readYamlObject :: FilePath -> IO (Object YamlScalar YamlScalar)
71−readYamlObject fp = do
72− es <- join $ decodeFile fp
73− convertAttemptWrap es
74−
75−data YamlScalar = YamlScalar
76− { value :: ByteString
77− , tag :: Tag
78− , style :: Style
79− }
80− deriving (Show, Eq)
81−instance ConvertSuccess YamlScalar Event where
82− convertSuccess (YamlScalar v t s) = EventScalar v (convertSuccess t) s
83−
84−instance ConvertSuccess YamlScalar String where
85− convertSuccess = convertSuccess . value
86−instance ConvertSuccess String YamlScalar where
87− convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
88−
89−instance ConvertSuccess YamlScalar Text where
90− convertSuccess = convertSuccess . value
91−instance ConvertSuccess Text YamlScalar where
92− convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
93−
94−instance ConvertSuccess YamlScalar ByteString where
95− convertSuccess = value
96−instance ConvertSuccess ByteString YamlScalar where
97− convertSuccess t = YamlScalar t NoTag Any
98−
99−$(deriveAttempts
100− [ (''String, ''YamlScalar)
101− , (''YamlScalar, ''String)
102− , (''ByteString, ''YamlScalar)
103− , (''YamlScalar, ''ByteString)
104− , (''Text, ''YamlScalar)
105− , (''YamlScalar, ''Text)
106− ])
107−
108−-- FIXME add Scalar instances
109−{-
110−instance ConvertSuccess YamlScalar Scalar where
111− convertSuccess = Text . convertSuccess
112−instance ConvertSuccess Scalar YamlScalar where
113− convertSuccess s = convertSuccess (convertSuccess s :: Text)
114−-}
115−
116−type YamlObject = Object YamlScalar YamlScalar
117−
118−$(deriveSuccessConvs ''YamlScalar ''YamlScalar
119− [''String, ''Text]
120− [''String, ''Text])
121−
122−$(deriveSuccessConvs ''String ''String [''YamlScalar] [''YamlScalar])
123−$(deriveSuccessConvs ''Text ''Text [''YamlScalar] [''YamlScalar])
124−
125−-- Emit a YamlObject to an event stream
126−instance ConvertSuccess YamlObject [Event] where
127− convertSuccess o = EventStreamStart
128− : EventDocumentStart
129− : helper o [EventDocumentEnd, EventStreamEnd] where
130− helper :: YamlObject -> [Event] -> [Event]
131− helper (Scalar y) rest = convertSuccess y : rest
132− helper (Sequence ys) rest =
133− EventSequenceStart
134− : foldr ($) (EventSequenceEnd : rest) (map helper ys)
135− helper (Mapping pairs) rest =
136− EventMappingStart
137− : foldr ($) (EventMappingEnd : rest) (map helperPairs pairs)
138− helperPairs :: (YamlScalar, YamlObject) -> [Event] -> [Event]
139− helperPairs (k, v) rest = convertSuccess k : helper v rest
140−instance ConvertSuccess YamlObject YamlDoc where
141− convertSuccess = cs . (cs :: YamlObject -> [Event])
142−instance ConvertAttempt YamlDoc YamlObject where
143− convertAttempt = ca <=< (ca :: YamlDoc -> Attempt [Event])
144−
145−instance ConvertAttempt [Event] YamlObject where
146− convertAttempt = eventsToYamlObject
147−
148−-- | Parse a YamlObject from an event stream
149−eventsToYamlObject :: MonadFailure YamlException m
150− => [Event]
151− -> m YamlObject
152−eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
153− where
154− h1 :: MonadFailure YamlException m => [Event] -> m YamlObject
155− h1 es = do
156− (yo, es') <- h2 es
157− case es' of
158− [EventDocumentEnd, EventStreamEnd] -> return yo
159− _ -> failure $ YamlInvalidEventStreamEnd es'
160− h2 :: MonadFailure YamlException m
161− => [Event]
162− -> m (YamlObject, [Event])
163− h2 [] = failure YamlPrematureEventStreamEnd
164− h2 (EventScalar v t s:rest) =
165− return (Scalar $ YamlScalar v (convertSuccess t) s, rest)
166− h2 (EventSequenceStart:es) = do
167− (yos, rest) <- readSeq id es
168− return (Sequence yos, rest)
169− h2 (EventMappingStart:es) = do
170− (ypairs, rest) <- readMap id es
171− return (Mapping ypairs, rest)
172− h2 (e:_) = failure $ YamlInvalidStartingEvent e
173−
174− readSeq :: MonadFailure YamlException m
175− => ([YamlObject] -> [YamlObject])
176− -> [Event]
177− -> m ([YamlObject], [Event])
178− readSeq _ [] = failure YamlPrematureEventStreamEnd
179− readSeq f (EventSequenceEnd:rest) = return (f [], rest)
180− readSeq f es = do
181− (next, rest) <- h2 es
182− readSeq (f . ((:) next)) rest
183−
184− readMap :: MonadFailure YamlException m
185− => ([(YamlScalar, YamlObject)] -> [(YamlScalar, YamlObject)])
186− -> [Event]
187− -> m ([(YamlScalar, YamlObject)], [Event])
188− readMap _ [] = failure YamlPrematureEventStreamEnd
189− readMap f (EventMappingEnd:rest) = return (f [], rest)
190− readMap f es = do
191− (key, rest) <- h2 es
192− key' <- case key of
193− Scalar y -> return y
194− _ -> failure YamlNonScalarKey
195− (val, rest') <- h2 rest
196− readMap (f . ((:) (key', val))) rest'
197−eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
198−
199−instance ConvertSuccess TextObject YamlDoc where
200− convertSuccess = cs . (cs :: TextObject -> YamlObject)
201−instance ConvertAttempt YamlDoc TextObject where
202− convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
203−
204−instance ConvertSuccess StringObject YamlDoc where
205− convertSuccess = cs . (cs :: StringObject -> YamlObject)
206−instance ConvertAttempt YamlDoc StringObject where
207− convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
208−
209−{- FIXME
210−instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
211− convertSuccess = mapKeysValues convertSuccess convertSuccess
212−instance ConvertSuccess (Object String Scalar) (Object YamlScalar YamlScalar) where
213− convertSuccess = mapKeysValues convertSuccess convertSuccess
214−-}
215−
216−#if TEST
217−newtype MyString = MyString String
218− deriving (Eq, Show)
219−instance ConvertSuccess MyString Text where
220− convertSuccess (MyString s) = convertSuccess s
221−instance ConvertSuccess Text MyString where
222− convertSuccess = MyString . convertSuccess
223−instance ConvertSuccess (Object Text Text) (Object MyString MyString) where
224− convertSuccess = mapKeysValues convertSuccess convertSuccess
225−instance ConvertSuccess (Object MyString MyString) (Object Text Text) where
226− convertSuccess = mapKeysValues convertSuccess convertSuccess
227−
228−myEquals :: Eq v => Attempt v -> Attempt v -> Bool
229−myEquals a1 a2
230− | isSuccess a1 && isSuccess a2 = fromSuccess a1 == fromSuccess a2
231− | otherwise = False
232−
233−propEncodeDecode :: Object MyString MyString -> Bool
234−propEncodeDecode o =
235− let to :: TextObject
236− to = cs o
237− yd :: YamlDoc
238− yd = cs to
239− to' = ca yd
240− in return to `myEquals` to'
241−
242−toSBS :: ConvertSuccess a ByteString => a -> ByteString
243−toSBS = convertSuccess
244−
245−toLBS :: ConvertSuccess a BL.ByteString => a -> BL.ByteString
246−toLBS = convertSuccess
247−
248−caseEmptyStrings :: Assertion
249−caseEmptyStrings = do
250− let m =
251− [ ("foo", "bar")
252− , ("baz", "")
253− , ("bin", "")
254− ]
255− let m' = map (toSBS *** toSBS) m
256− let m'' = map (toLBS *** toLBS) m
257− let test' :: (ConvertSuccess x TextObject,
258− ConvertSuccess TextObject x,
259− Eq x,
260− Show x)
261− => x
262− -> Assertion
263− test' x = do
264− let to :: TextObject
265− to = cs x
266− yd :: YamlDoc
267− yd = cs to
268− to' :: Attempt TextObject
269− to' = ca yd
270− to'' <- fa to'
271− to'' @?= to
272− test' $ toTextObject m
273− test' $ toTextObject m'
274− test' $ toTextObject m''
275−
276−{-
277−-- FIXME remove the following
278−instance ToObject [(String, String)] Text Text where
279− toObject = Mapping . map (cs *** toObject)
280−instance ToObject [(ByteString, ByteString)] Text Text where
281− toObject = Mapping . map (cs *** toObject)
282−instance ToObject [(BL.ByteString, BL.ByteString)] Text Text where
283− toObject = Mapping . map (cs *** toObject)
284−instance ToObject [(String, TextObject)] Text Text where
285− toObject = Mapping . map (cs *** id)
286−-}
287−
288−caseLargeObjects :: Assertion
289−caseLargeObjects = do
290− let level3 = toTextObject (convertSuccess "X" :: Text)
291− level2 = toTextObject $ replicate 10000 level3
292− level1 = toTextObject $ zip (map (: []) ['A'..'Z']) $ repeat level2
293− decoded :: Maybe TextObject
294− decoded = fa $ ca $ (cs level1 :: YamlDoc)
295− assertEqual "encode/decode identity" decoded $ Just level1
296− putStrLn "encoding the file..."
297− writeYamlDoc "test.yaml" $ cs level1
298−
299−testSuite :: Test
300−testSuite = testGroup "Text.Yaml"
301− [ testProperty "propEncodeDecode" propEncodeDecode
302− , testCase "empty strings" caseEmptyStrings
303− , testCase "encode large objects" caseLargeObjects
304− ]
305−
306−instance Arbitrary (Object MyString MyString) where
307− coarbitrary = undefined
308− arbitrary = oneof [arbS, arbL, arbM] where
309− arbS = Scalar `fmap` (arbitrary :: Gen MyString)
310− arbL = Sequence `fmap` vector 1
311− arbM = Mapping `fmap` vector 1
312−
313−instance Arbitrary MyString where
314− coarbitrary = undefined
315− arbitrary = do
316− size <- arbitrary
317− s <- replicateM (size `mod` 5) $ elements ['A'..'Z']
318− return $! MyString s
319−#endif
Data/Object/Yaml/Internal.hsdeleted−91
@@ -1,91 +0,0 @@
1−{-# LANGUAGE TypeSynonymInstances #-}
2−{-# LANGUAGE MultiParamTypeClasses #-}
3−{-# LANGUAGE DeriveDataTypeable #-}
4−module Data.Object.Yaml.Internal
5− ( -- * The event stream
6− Event (..)
7− , Style (..)
8− , Tag (..)
9− -- * Exceptions
10− , YamlException (..)
11− ) where
12−
13−import Data.ByteString (ByteString)
14−import Control.Exception (Exception)
15−import Data.Typeable (Typeable)
16−import Data.Convertible.Text
17−
18−data Event =
19− EventNone
20− | EventStreamStart
21− | EventStreamEnd
22− | EventDocumentStart
23− | EventDocumentEnd
24− | EventAlias
25− | EventScalar ByteString Tag Style
26− | EventSequenceStart
27− | EventSequenceEnd
28− | EventMappingStart
29− | EventMappingEnd
30− deriving (Show, Eq)
31−
32−data Style = Any
33− | Plain
34− | SingleQuoted
35− | DoubleQuoted
36− | Literal
37− | Folded
38− deriving (Show, Eq, Enum, Bounded, Ord)
39−
40−data Tag = StrTag
41− | FloatTag
42− | NullTag
43− | BoolTag
44− | SetTag
45− | IntTag
46− | SeqTag
47− | MapTag
48− | UriTag String
49− | NoTag
50− deriving (Show, Eq)
51−instance ConvertSuccess Tag String where
52− convertSuccess StrTag = "tag:yaml.org,2002:str"
53− convertSuccess FloatTag = "tag:yaml.org,2002:float"
54− convertSuccess NullTag = "tag:yaml.org,2002:null"
55− convertSuccess BoolTag = "tag:yaml.org,2002:bool"
56− convertSuccess SetTag = "tag:yaml.org,2002:set"
57− convertSuccess IntTag = "tag:yaml.org,2002:int"
58− convertSuccess SeqTag = "tag:yaml.org,2002:seq"
59− convertSuccess MapTag = "tag:yaml.org,2002:map"
60− convertSuccess (UriTag s) = s
61− convertSuccess NoTag = ""
62−instance ConvertSuccess ByteString Tag where
63− convertSuccess = (cs :: String -> Tag) . cs
64−instance ConvertSuccess String Tag where
65− convertSuccess "tag:yaml.org,2002:str" = StrTag
66− convertSuccess "tag:yaml.org,2002:float" = FloatTag
67− convertSuccess "tag:yaml.org,2002:null" = NullTag
68− convertSuccess "tag:yaml.org,2002:bool" = BoolTag
69− convertSuccess "tag:yaml.org,2002:set" = SetTag
70− convertSuccess "tag:yaml.org,2002:int" = IntTag
71− convertSuccess "tag:yaml.org,2002:seq" = SeqTag
72− convertSuccess "tag:yaml.org,2002:map" = MapTag
73− convertSuccess "" = NoTag
74− convertSuccess s = UriTag s
75−
76−data YamlException =
77− YamlParserException
78− { parserProblem :: String
79− , parserContext :: String
80− , parserOffset :: Int
81− }
82− | YamlEmitterException { emitterProblem :: String }
83− | YamlOutOfMemory
84− | YamlInvalidEventStreamBeginning [Event]
85− | YamlInvalidEventStreamEnd [Event]
86− | YamlPrematureEventStreamEnd
87− | YamlNonScalarKey
88− | YamlInvalidStartingEvent Event
89− | YamlFileNotFound FilePath
90− deriving (Show, Typeable)
91−instance Exception YamlException
Data/Object/Yaml/Lib.hs → Text/Libyaml.hsrenamed+92−5
@@ -4,19 +4,29 @@
4{-# LANGUAGE FlexibleContexts #-}
4{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE MultiParamTypeClasses #-}
5{-# LANGUAGE MultiParamTypeClasses #-}
6
6
7−module Data.Object.Yaml.Lib
7+module Text.Libyaml
8+ ( -- * The event stream
9+ Event (..)
10+ , Style (..)
11+ , Tag (..)
12+ -- * Exceptions
13+ , YamlException (..)
14+ -- * Low level
8− ( withEmitter
15+ , withEmitter
9 , emitEvents
16 , emitEvents
10 , withParser
17 , withParser
11 , parserParse
18 , parserParse
12 -- * Higher level functions
19 -- * Higher level functions
13 , encode
20 , encode
14 , decode
21 , decode
22+ -- FIXME encodeFile
15 , decodeFile
23 , decodeFile
16 ) where
24 ) where
17
25
18import qualified Data.ByteString.Internal as B
26import qualified Data.ByteString.Internal as B
27+import qualified Data.ByteString.Char8 as B8
19import qualified Data.ByteString
28import qualified Data.ByteString
29+import Data.ByteString (ByteString)
20import Control.Monad
30import Control.Monad
21import Foreign.C
31import Foreign.C
22import Foreign.Ptr
32import Foreign.Ptr
@@ -28,10 +38,87 @@ import Data.Attempt -- exports failure
28import Data.Convertible.Text
38import Data.Convertible.Text
29import Control.Applicative
39import Control.Applicative
30
40
31−import Data.Object.Yaml.Internal
32import Control.Exception (throwIO, Exception)
41import Control.Exception (throwIO, Exception)
33import Data.Typeable (Typeable)
42import Data.Typeable (Typeable)
34
43
44+data Event =
45+ EventNone
46+ | EventStreamStart
47+ | EventStreamEnd
48+ | EventDocumentStart
49+ | EventDocumentEnd
50+ | EventAlias
51+ | EventScalar !ByteString !Tag !Style
52+ | EventSequenceStart
53+ | EventSequenceEnd
54+ | EventMappingStart
55+ | EventMappingEnd
56+ deriving (Show, Eq)
57+
58+data Style = Any
59+ | Plain
60+ | SingleQuoted
61+ | DoubleQuoted
62+ | Literal
63+ | Folded
64+ deriving (Show, Eq, Enum, Bounded, Ord)
65+
66+data Tag = StrTag
67+ | FloatTag
68+ | NullTag
69+ | BoolTag
70+ | SetTag
71+ | IntTag
72+ | SeqTag
73+ | MapTag
74+ | UriTag String
75+ | NoTag
76+ deriving (Show, Eq)
77+
78+tagToString :: Tag -> String
79+tagToString StrTag = "tag:yaml.org,2002:str"
80+tagToString FloatTag = "tag:yaml.org,2002:float"
81+tagToString NullTag = "tag:yaml.org,2002:null"
82+tagToString BoolTag = "tag:yaml.org,2002:bool"
83+tagToString SetTag = "tag:yaml.org,2002:set"
84+tagToString IntTag = "tag:yaml.org,2002:int"
85+tagToString SeqTag = "tag:yaml.org,2002:seq"
86+tagToString MapTag = "tag:yaml.org,2002:map"
87+tagToString (UriTag s) = s
88+tagToString NoTag = ""
89+
90+bsToTag :: ByteString -> Tag
91+bsToTag = stringToTag . B8.unpack
92+
93+stringToTag :: String -> Tag
94+stringToTag "tag:yaml.org,2002:str" = StrTag
95+stringToTag "tag:yaml.org,2002:float" = FloatTag
96+stringToTag "tag:yaml.org,2002:null" = NullTag
97+stringToTag "tag:yaml.org,2002:bool" = BoolTag
98+stringToTag "tag:yaml.org,2002:set" = SetTag
99+stringToTag "tag:yaml.org,2002:int" = IntTag
100+stringToTag "tag:yaml.org,2002:seq" = SeqTag
101+stringToTag "tag:yaml.org,2002:map" = MapTag
102+stringToTag "" = NoTag
103+stringToTag s = UriTag s
104+
105+data YamlException =
106+ YamlParserException
107+ { parserProblem :: String
108+ , parserContext :: String
109+ , parserOffset :: Int
110+ }
111+ | YamlEmitterException { emitterProblem :: String }
112+ | YamlOutOfMemory
113+ | YamlInvalidEventStreamBeginning [Event]
114+ | YamlInvalidEventStreamEnd [Event]
115+ | YamlPrematureEventStreamEnd
116+ | YamlNonScalarKey
117+ | YamlInvalidStartingEvent Event
118+ | YamlFileNotFound FilePath
119+ deriving (Show, Typeable)
120+instance Exception YamlException
121+
35data ParserStruct
122data ParserStruct
36type Parser = Ptr ParserStruct
123type Parser = Ptr ParserStruct
37parserSize :: Int
124parserSize :: Int
@@ -202,7 +289,7 @@ getEvent er = do
202 else B.create ytag_len'
289 else B.create ytag_len'
203 $ \dest -> B.memcpy dest ytag' (toEnum ytag_len')
290 $ \dest -> B.memcpy dest ytag' (toEnum ytag_len')
204 let style = toEnum $ fromEnum ystyle
291 let style = toEnum $ fromEnum ystyle
205− return $ EventScalar bs (convertSuccess tagbs) style
292+ return $ EventScalar bs (bsToTag tagbs) style
206 YamlSequenceStartEvent -> return EventSequenceStart
293 YamlSequenceStartEvent -> return EventSequenceStart
207 YamlSequenceEndEvent -> return EventSequenceEnd
294 YamlSequenceEndEvent -> return EventSequenceEnd
208 YamlMappingStartEvent -> return EventMappingStart
295 YamlMappingStartEvent -> return EventMappingStart
@@ -381,7 +468,7 @@ toEventRaw e f = withEventRaw $ \er -> do
381 value'' = if ptrToIntPtr value' == 0
468 value'' = if ptrToIntPtr value' == 0
382 then intPtrToPtr 1 -- c/api.c:827
469 then intPtrToPtr 1 -- c/api.c:827
383 else value'
470 else value'
384− let thetag' = convertSuccess thetag
471+ let thetag' = tagToString thetag
385 withCString thetag' $ \tag' -> do
472 withCString thetag' $ \tag' -> do
386 let style' = toEnum $ fromEnum style
473 let style' = toEnum $ fromEnum style
387 tagP = castPtr tag'
474 tagP = castPtr tag'
data-object-yaml.cabal → yaml.cabalrenamed+6−8
@@ -1,16 +1,16 @@
1−name: data-object-yaml
1+name: yaml
2−version: 0.0.1
2+version: 0.2.0
3license: BSD3
3license: BSD3
4license-file: LICENSE
4license-file: LICENSE
5author: Michael Snoyman <michael@snoyman.com>
5author: Michael Snoyman <michael@snoyman.com>
6maintainer: Michael Snoyman <michael@snoyman.com>
6maintainer: Michael Snoyman <michael@snoyman.com>
7−synopsis: Support for serialising Haskell to and from Yaml.
7+synopsis: Low-level binding to the libyaml C library.
8−description: Binds to the libyaml library
8+description: Provides support for parsing and emitting Yaml documents. Includes the full C library in the package so you don't need to worry about any non-Haskell dependencies.
9category: Web
9category: Web
10stability: unstable
10stability: unstable
11cabal-version: >= 1.2
11cabal-version: >= 1.2
12build-type: Simple
12build-type: Simple
13−homepage: http://github.com/snoyberg/yaml/tree/data-object-yaml
13+homepage: http://github.com/snoyberg/yaml/
14extra-source-files: c/helper.h,
14extra-source-files: c/helper.h,
15 c/yaml_private.h,
15 c/yaml_private.h,
16 c/yaml.h
16 c/yaml.h
@@ -33,9 +33,7 @@ library
33 text >= 0.5 && < 0.6,
33 text >= 0.5 && < 0.6,
34 convertible-text >= 0.2.0 && < 0.3,
34 convertible-text >= 0.2.0 && < 0.3,
35 attempt >= 0.2.0 && < 0.3
35 attempt >= 0.2.0 && < 0.3
36− exposed-modules: Data.Object.Yaml
36+ exposed-modules: Text.Libyaml
37− Data.Object.Yaml.Internal
38− other-modules: Data.Object.Yaml.Lib
39 ghc-options: -Wall
37 ghc-options: -Wall
40 c-sources: c/helper.c,
38 c-sources: c/helper.c,
41 c/api.c,
39 c/api.c,