-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Pretty structural diffs between two values -- -- This uses GHC.Generics to provide structural diffs between -- two values in pretty-printed form. This is primarily useful for test -- assertions and manual inspection of values. @package portray-diff @version 0.1.1 -- | Typeclass for pretty-printed diffs between two instances of a type. -- -- Derive it for arbitrary sum-of-products types as follows: -- --
--   data Foo = Foo Int | Bar Bool
--     deriving Generic
--     deriving (Portray, Diff) via Wrapped Generic Foo
--   
-- -- If the type of the compared values has a custom Eq instance, the -- equality comparison used by the Generic derived Diff instance *will -- differ* from the custom one implemented for the type. It will only -- check to make sure that the representations of the two types are the -- same. If you still want the diff algorithm to look into the type, you -- will need to implement a custom Diff instance alongside the custom Eq -- instance. If you don't want the diff algorithm to look inside a type, -- and instead use the custom Eq instance, use: -- --
--   data Foo = ...
--   instance Diff Foo where diff = diffAtom
--   
module Data.Portray.Diff -- | Structural comparison between values giving a description of -- differences. class Diff a -- | Returns Nothing when equal; or a Portrayal showing the -- differences. diff :: Diff a => a -> a -> Maybe Portrayal -- | Returns Nothing when equal; or a Portrayal showing the -- differences. diff :: (Diff a, Generic a, GDiff a (Rep a)) => a -> a -> Maybe Portrayal -- | Diff on an atomic type, just by using the Eq and Portray instances -- without using any internal structure of the type. diffAtom :: (Eq a, Portray a) => a -> a -> Maybe Portrayal -- | A DerivingVia wrapper for providing Diff by Eq -- and Portray. newtype DiffAtom a DiffAtom :: a -> DiffAtom a -- | Produce a Portrayal describing a single atomic difference. diffVs :: Portrayal -> Portrayal -> Portrayal -- | Generic implementation of Diff. -- -- This is primarily exported to appease Haddock; use via Wrapped -- Generic T to access this functionality. class GDiff a f gdiff :: GDiff a f => a -> a -> f x -> f x -> Maybe Portrayal -- | Diff record fields, creating docs only for fields that differ. class GDiffRecord f gdiffRecord :: GDiffRecord f => f x -> f x -> DList (FactorPortrayal Portrayal) -- | Diff constructor fields, filling equal fields with "_" and reporting -- whether any diffs were detected. -- -- N.B. this works fine on record constructors, too, in case we want to -- support configuring whether to use record syntax or constructor -- application syntax. -- -- This is a separate class from GDiffRecord because it'd be wasteful to -- accumulate tons of "_" docs for records with lots of fields and then -- discard them. class GDiffCtor f gdiffCtor :: GDiffCtor f => f x -> f x -> (Any, DList Portrayal) instance Data.Portray.Portray a => Data.Portray.Portray (Data.Portray.Diff.DiffAtom a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Portray.Diff.DiffAtom a) instance (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (GHC.Base.NonEmpty a) instance (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (Data.Sequence.Internal.Seq a) instance Data.Portray.Diff.Diff Data.Portray.Assoc instance Data.Portray.Diff.Diff Data.Portray.IdentKind instance Data.Portray.Diff.Diff Data.Portray.Ident instance Data.Portray.Diff.Diff Data.Portray.Infixity instance Data.Portray.Diff.Diff Data.Portray.Base instance Data.Portray.Diff.Diff Data.Portray.FloatLiteral instance Data.Portray.Diff.Diff Data.Portray.SpecialFloatVal instance Data.Portray.Diff.Diff a => Data.Portray.Diff.Diff (Data.Portray.FactorPortrayal a) instance (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (Data.Portray.PortrayalF a) instance (forall a. (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (f a), forall a. Data.Portray.Portray a => Data.Portray.Portray (f a)) => Data.Portray.Diff.Diff (Data.Portray.Fix f) instance Data.Portray.Diff.Diff Data.Portray.Portrayal instance Data.Portray.Diff.Diff a => Data.Portray.Diff.Diff (Data.Functor.Identity.Identity a) instance Data.Portray.Diff.Diff a => Data.Portray.Diff.Diff (Data.Functor.Const.Const a b) instance (GHC.Classes.Eq a, Data.Portray.Portray a) => Data.Portray.Diff.Diff (Data.Portray.Diff.DiffAtom a) instance (GHC.Generics.Generic a, Data.Portray.Diff.GDiff a (GHC.Generics.Rep a)) => Data.Portray.Diff.Diff (Data.Wrapped.Wrapped GHC.Generics.Generic a) instance (GHC.Generics.Selector s, Data.Portray.Diff.Diff a) => Data.Portray.Diff.GDiffRecord (GHC.Generics.S1 s (GHC.Generics.K1 i a)) instance Data.Portray.Diff.Diff a => Data.Portray.Diff.GDiffCtor (GHC.Generics.S1 s (GHC.Generics.K1 i a)) instance Data.Portray.Diff.Diff () instance (Data.Portray.Portray a, Data.Portray.Portray b, Data.Portray.Diff.Diff a, Data.Portray.Diff.Diff b) => Data.Portray.Diff.Diff (a, b) instance (Data.Portray.Portray a, Data.Portray.Portray b, Data.Portray.Portray c, Data.Portray.Diff.Diff a, Data.Portray.Diff.Diff b, Data.Portray.Diff.Diff c) => Data.Portray.Diff.Diff (a, b, c) instance (Data.Portray.Portray a, Data.Portray.Portray b, Data.Portray.Portray c, Data.Portray.Portray d, Data.Portray.Diff.Diff a, Data.Portray.Diff.Diff b, Data.Portray.Diff.Diff c, Data.Portray.Diff.Diff d) => Data.Portray.Diff.Diff (a, b, c, d) instance (Data.Portray.Portray a, Data.Portray.Portray b, Data.Portray.Portray c, Data.Portray.Portray d, Data.Portray.Portray e, Data.Portray.Diff.Diff a, Data.Portray.Diff.Diff b, Data.Portray.Diff.Diff c, Data.Portray.Diff.Diff d, Data.Portray.Diff.Diff e) => Data.Portray.Diff.Diff (a, b, c, d, e) instance (Data.Portray.Portray a, Data.Portray.Portray b, Data.Portray.Diff.Diff a, Data.Portray.Diff.Diff b) => Data.Portray.Diff.Diff (Data.Either.Either a b) instance (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (GHC.Maybe.Maybe a) instance Data.Portray.Diff.Diff GHC.Types.Bool instance Data.Portray.Diff.Diff GHC.Types.Int instance Data.Portray.Diff.Diff GHC.Int.Int8 instance Data.Portray.Diff.Diff GHC.Int.Int16 instance Data.Portray.Diff.Diff GHC.Int.Int32 instance Data.Portray.Diff.Diff GHC.Int.Int64 instance Data.Portray.Diff.Diff GHC.Types.Word instance Data.Portray.Diff.Diff GHC.Word.Word8 instance Data.Portray.Diff.Diff GHC.Word.Word16 instance Data.Portray.Diff.Diff GHC.Word.Word32 instance Data.Portray.Diff.Diff GHC.Word.Word64 instance Data.Portray.Diff.Diff GHC.Types.Char instance Data.Portray.Diff.Diff GHC.Num.Integer.Integer instance Data.Portray.Diff.Diff GHC.Types.Float instance Data.Portray.Diff.Diff GHC.Types.Double instance Data.Portray.Diff.Diff Data.Text.Internal.Text instance (GHC.Classes.Eq a, Data.Portray.Portray a) => Data.Portray.Diff.Diff (GHC.Real.Ratio a) instance (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff [a] instance (GHC.Exts.IsList a, Data.Portray.Portray (GHC.Exts.Item a), Data.Portray.Diff.Diff (GHC.Exts.Item a)) => Data.Portray.Diff.Diff (Data.Wrapped.Wrapped GHC.Exts.IsList a) instance (Data.Portray.Portray a, Data.Foldable.Foldable f, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (Data.Wrapped.Wrapped1 Data.Foldable.Foldable f a) instance (Data.Portray.Portray a, Data.Portray.Diff.Diff a) => Data.Portray.Diff.Diff (Data.IntMap.Internal.IntMap a) instance Data.Portray.Diff.Diff (Data.Typeable.Internal.TypeRep a) instance Data.Portray.Diff.Diff Data.Typeable.Internal.SomeTypeRep instance Data.Portray.Diff.Diff (a Data.Type.Equality.:~: b) instance (GHC.TypeLits.KnownSymbol n, Data.Portray.Diff.GDiffRecord f) => Data.Portray.Diff.GDiff a (GHC.Generics.C1 ('GHC.Generics.MetaCons n fx 'GHC.Types.True) f) instance (GHC.TypeLits.KnownSymbol n, Data.Portray.Diff.GDiffCtor f) => Data.Portray.Diff.GDiff a (GHC.Generics.C1 ('GHC.Generics.MetaCons n fx 'GHC.Types.False) f) instance (Data.Portray.Portray a, Data.Portray.Diff.GDiff a f, Data.Portray.Diff.GDiff a g) => Data.Portray.Diff.GDiff a (f GHC.Generics.:+: g) instance Data.Portray.Diff.GDiff a f => Data.Portray.Diff.GDiff a (GHC.Generics.D1 d f) instance Data.Portray.Diff.GDiffCtor GHC.Generics.U1 instance (Data.Portray.Diff.GDiffCtor f, Data.Portray.Diff.GDiffCtor g) => Data.Portray.Diff.GDiffCtor (f GHC.Generics.:*: g) instance (Data.Portray.Diff.GDiffRecord f, Data.Portray.Diff.GDiffRecord g) => Data.Portray.Diff.GDiffRecord (f GHC.Generics.:*: g)