on master help sign in
Added Tag data type
commit450a2836941d3a4fee8b4ba88a992b6feec83d8e authorMichael Snoyman <michael@snoyman.com> dateThu 10 Dec 2009, 23:50 (17 years ago) parent0c26822
2 files changed+45−5
Data/Object/Yaml.hs+44−4 Text/Libyaml.hs+1−1
Data/Object/Yaml.hs+44−4
@@ -6,6 +6,7 @@ module Data.Object.Yaml
66 ( -- * The event stream
77 Event (..)
88 , Style (..)
9+ , Tag (..)
910 -- * 'YamlObject' definition
1011 , Yaml (..)
1112 , YamlObject
@@ -34,7 +35,7 @@ data Event =
3435 | EventDocumentStart
3536 | EventDocumentEnd
3637 | EventAlias
37− | EventScalar ByteString ByteString Style
38+ | EventScalar ByteString Tag Style
3839 | EventSequenceStart
3940 | EventSequenceEnd
4041 | EventMappingStart
@@ -49,9 +50,48 @@ data Style = Any
4950 | Folded
5051 deriving (Show, Eq, Enum, Bounded, Ord)
5152
53+data Tag = StrTag
54+ | FloatTag
55+ | NullTag
56+ | BoolTag
57+ | SetTag
58+ | IntTag
59+ | SeqTag
60+ | MapTag
61+ | UriTag String
62+ | NoTag
63+ deriving Eq
64+instance Show Tag where
65+ show StrTag = "tag:yaml.org,2002:str"
66+ show FloatTag = "tag:yaml.org,2002:float"
67+ show NullTag = "tag:yaml.org,2002:null"
68+ show BoolTag = "tag:yaml.org,2002:bool"
69+ show SetTag = "tag:yaml.org,2002:set"
70+ show IntTag = "tag:yaml.org,2002:int"
71+ show SeqTag = "tag:yaml.org,2002:seq"
72+ show MapTag = "tag:yaml.org,2002:map"
73+ show (UriTag s) = s
74+ show NoTag = ""
75+instance ConvertSuccess Tag [Char] where
76+ convertSuccess = show
77+instance ConvertSuccess ByteString Tag where
78+ convertSuccess = (convertSuccess :: String -> Tag)
79+ . convertSuccess
80+instance ConvertSuccess [Char] Tag where
81+ convertSuccess "tag:yaml.org,2002:str" = StrTag
82+ convertSuccess "tag:yaml.org,2002:float" = FloatTag
83+ convertSuccess "tag:yaml.org,2002:null" = NullTag
84+ convertSuccess "tag:yaml.org,2002:bool" = BoolTag
85+ convertSuccess "tag:yaml.org,2002:set" = SetTag
86+ convertSuccess "tag:yaml.org,2002:int" = IntTag
87+ convertSuccess "tag:yaml.org,2002:seq" = SeqTag
88+ convertSuccess "tag:yaml.org,2002:map" = MapTag
89+ convertSuccess "" = NoTag
90+ convertSuccess s = UriTag s
91+
5292data Yaml = Yaml
5393 { value :: ByteString
54− , tag :: String
94+ , tag :: Tag
5595 , style :: Style
5696 }
5797 deriving (Show, Eq)
@@ -61,12 +101,12 @@ instance ConvertSuccess Yaml Event where
61101instance ConvertSuccess Yaml [Char] where
62102 convertSuccess = convertSuccess . value
63103instance ConvertSuccess [Char] Yaml where
64− convertSuccess t = Yaml (convertSuccess t) "" Any
104+ convertSuccess t = Yaml (convertSuccess t) NoTag Any
65105
66106instance ConvertSuccess Yaml Text where
67107 convertSuccess = convertSuccess . value
68108instance ConvertSuccess Text Yaml where
69− convertSuccess t = Yaml (convertSuccess t) "" Any
109+ convertSuccess t = Yaml (convertSuccess t) NoTag Any
70110
71111-- FIXME the following are incredibly stupid conversions which ignore tag
72112-- and style information.
Text/Libyaml.hs+1−1
@@ -165,7 +165,7 @@ getEvent er = do
165165 tagbs <- B.create ytag_len'
166166 $ \dest -> B.memcpy dest ytag' (toEnum ytag_len')
167167 let style = toEnum $ fromEnum ystyle
168− return $ EventScalar bs tagbs style
168+ return $ EventScalar bs (convertSuccess tagbs) style
169169 YamlSequenceStartEvent -> return EventSequenceStart
170170 YamlSequenceEndEvent -> return EventSequenceEnd
171171 YamlMappingStartEvent -> return EventMappingStart