@@ -47,6 +47,7 @@ import Data.List.NonEmpty (NonEmpty)
4747import Data.Text (Text )
4848import Data.Text qualified as T
4949import Data.Type.Equality (TestEquality (.. ), (:~:) (.. ))
50+ import Data.Word (Word64 )
5051import Prettyprinter (
5152 Doc ,
5253 Pretty (.. ),
@@ -176,6 +177,8 @@ data ValidationTrace (v :: Validity) where
176177 ChoiceBranch :: Int -> ValidationTrace IsValid -> ValidationTrace IsValid
177178 ListTrace :: ListValidationTrace v -> ValidationTrace v
178179 MapTrace :: MapValidationTrace v -> ValidationTrace v
180+ TagTrace :: Word64 -> ValidationTrace v -> ValidationTrace v
181+ InvalidTag :: Word64 -> ValidationTrace IsInvalid
179182
180183deriving instance Show (ValidationTrace v )
181184
@@ -259,9 +262,11 @@ instance IsValidationTrace ValidationTrace where
259262 UnapplicableRule {} -> SInvalid
260263 CustomFailure {} -> SInvalid
261264 UnsatisfiedControl {} -> SInvalid
265+ InvalidTag {} -> SInvalid
262266 ReferenceRule _ x -> traceValidity x
263267 ListTrace x -> traceValidity x
264268 MapTrace x -> traceValidity x
269+ TagTrace _ x -> traceValidity x
265270
266271 measureProgress = \ case
267272 TerminalRule {} -> 1
@@ -270,9 +275,11 @@ instance IsValidationTrace ValidationTrace where
270275 UnapplicableRule {} -> 0
271276 CustomFailure {} -> 0
272277 UnsatisfiedControl {} -> 0
273- (ReferenceRule _ x) -> succ $ measureProgress x
274- (ListTrace x) -> measureProgress x
275- (MapTrace x) -> measureProgress x
278+ InvalidTag {} -> 0
279+ ReferenceRule _ x -> succ $ measureProgress x
280+ ListTrace x -> measureProgress x
281+ MapTrace x -> measureProgress x
282+ TagTrace _ x -> succ $ measureProgress x
276283
277284instance IsValidationTrace ListValidationTrace where
278285 traceValidity = \ case
@@ -453,6 +460,13 @@ prettyValidationTrace opts = \case
453460 [ " map"
454461 , nestContainer $ prettyMapValidationResult opts m
455462 ]
463+ TagTrace t x ->
464+ vsep
465+ [ " tag:" <+> annotate (color Green ) (" #6." <> pretty t)
466+ , nestContainer $ prettyValidationTrace opts x
467+ ]
468+ InvalidTag t ->
469+ " expected tag #6." <> pretty t
456470
457471showValidationTrace :: ValidationTrace v -> String
458472showValidationTrace =
0 commit comments