úÎ.D,4      None69:;QRkA class of types that have additional invariants defined upon them that aren't enforced by the type system4 should be an underapproximation of actual validity.This means that if a is not a perfect representation of actual validity, for safety reasons, it should never return  ( for invalid values, but it may return ! for valid values. For example: isValid = const FalseAis a valid implementation for any type, because it never returns   for invalid values. isValid (Even i) = i == 2is a valid implementation for newtype Even = Even Int, but #isValid (Even i) = even i || i == 1is not because it returns   for an invalid value: '1'.3Construct a valid element from an unchecked element>Construct a valid element from an unchecked element, throwing " on invalid elements. !Valid according to the contained #. Valid if the contained #6s are valid and the denominator is strictly positive. Valid according to $Only available with  base >= 4.8. Trivially validBInteger is not trivially valid under the hood, but instantiating N correctly would force validity to depend on a specific (big integer library  integer-gmp versus integer-simpleY). This is rather impractical so for the time being we have opted for assuming that an #X is always valid. Even though this is not technically sound, it is good enough for now.NOT trivially valid:NaN is not valid.Infinite values are not valid.NOT trivially valid:NaN is not valid.Infinite values are not valid.Trivially validTrivially validTrivially validTrivially validTrivially validTrivially validTrivially validTrivially validcA Maybe thing is valid if the thing inside is valid or it's nothing It makes sense to assume that %Z is valid. If Nothing wasn't valid, you wouldn't have used a Maybe in the datastructure.9A list of things is valid if all of the things are valid.¥This means that the empty list is considered valid. If the empty list should not be considered valid as part of your custom data type, make sure to write a custom Validity instanceCAny tuple of things is valid if all three of its elements are validOAny Either of things is valid if the contents are valid in either of the cases.>Any tuple of things is valid if both of its elements are valid&' &' Safe9;<=kA class of types that have additional invariants defined upon them that aren't enforced by the type systemIf there is a  Validity a instance as well, then a  b should imply  isValid a for any b.If there is a  Validity b instance as well, then a  b should imply  isValid b for any a.(      !"#$%#$&'()*+,'-.'/0123&validity-0.3.3.0-1XCNpDuatrGqgsJa54nku Data.ValidityData.RelativeValidityValidityisValid isInvalidconstructValidconstructValidUnsafe $fGValidityK1 $fGValidityM1$fGValidity:+:$fGValidity:*: $fGValidityU1$fValidityFixed$fValidityRatio$fValidityNatural$fValidityInteger$fValidityDouble$fValidityFloat$fValidityWord16$fValidityWord8$fValidityWord $fValidityInt$fValidityChar$fValidityOrdering$fValidityBool $fValidity()$fValidityMaybe $fValidity[]$fValidity(,,)$fValidityEither $fValidity(,)RelativeValidity isValidFor isInvalidForghc-prim GHC.TypesTrueFalsebaseGHC.Errerror integer-gmpGHC.Integer.TypeInteger GHC.NaturalisValidNaturalGHC.BaseNothing GValiditygIsValid