@@ -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.