| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.TreeDiff.Class
Contents
Description
A ToExpr class.
Documentation
ediff :: ToExpr a => a -> a -> Edit EditExpr #
Difference between two ToExpr values.
>>>let x = (1, Just 2) :: (Int, Maybe Int)>>>let y = (1, Nothing)>>>prettyEditExpr (ediff x y)_×_ 1 -(Just 2) +Nothing
>>>data Foo = Foo { fooInt :: Either Char Int, fooBool :: [Maybe Bool], fooString :: String } deriving (Eq, Generic)>>>instance ToExpr Foo
>>>prettyEditExpr $ ediff (Foo (Right 2) [Just True] "fo") (Foo (Right 3) [Just True] "fo")Foo {fooBool = [Just True], fooInt = Right -2 +3, fooString = "fo"}
>>>prettyEditExpr $ ediff (Foo (Right 42) [Just True, Just False] "old") (Foo (Right 42) [Nothing, Just False, Just True] "new")Foo {fooBool = [-Just True, +Nothing, Just False, +Just True], fooInt = Right 42, fooString = -"old" +"new"}
ediff' :: (ToExpr a, ToExpr b) => a -> b -> Edit EditExpr #
Compare different types.
Note: Use with care as you can end up comparing apples with oranges.
>>>prettyEditExpr $ ediff' ["foo", "bar"] [Just "foo", Nothing][-"foo", +Just "foo", -"bar", +Nothing]
toExpr converts a Haskell value into
untyped Haskell-like syntax tree, Expr.
>>>toExpr ((1, Just 2) :: (Int, Maybe Int))App "_\215_" [App "1" [],App "Just" [App "2" []]]
Methods
toExpr :: (Generic a, All2 ToExpr (GCode a), GFrom a, GDatatypeInfo a) => a -> Expr #
listToExpr :: [a] -> Expr #
Instances
| ToExpr Bool # | |
| ToExpr Char # |
|
| ToExpr Double # | |
| ToExpr Float # | |
| ToExpr Int # | |
| ToExpr Int8 # | |
| ToExpr Int16 # | |
| ToExpr Int32 # | |
| ToExpr Int64 # | |
| ToExpr Integer # | |
| ToExpr Natural # | |
| ToExpr Ordering # | |
| ToExpr Word # | |
| ToExpr Word8 # | |
| ToExpr Word16 # | |
| ToExpr Word32 # | |
| ToExpr Word64 # | |
| ToExpr () # | |
| ToExpr ByteString # |
|
| ToExpr ByteString # |
|
| ToExpr Scientific # |
|
| ToExpr Text # |
|
| ToExpr UTCTime # | |
| ToExpr Value # | |
| ToExpr Text # |
|
| ToExpr Void # | |
| ToExpr IntSet # | |
| ToExpr Day # |
|
| ToExpr UUID # |
|
| ToExpr Expr # | |
| ToExpr a => ToExpr [a] # | |
| ToExpr a => ToExpr (Maybe a) # | |
| (ToExpr a, Integral a) => ToExpr (Ratio a) # |
|
| HasResolution a => ToExpr (Fixed a) # | |
| ToExpr a => ToExpr (Min a) # | |
| ToExpr a => ToExpr (Max a) # | |
| ToExpr a => ToExpr (First a) # | |
| ToExpr a => ToExpr (Last a) # | |
| ToExpr a => ToExpr (Option a) # | |
| ToExpr a => ToExpr (NonEmpty a) # | |
| ToExpr a => ToExpr (ZipList a) # | |
| ToExpr a => ToExpr (Identity a) # |
|
| ToExpr a => ToExpr (Dual a) # | |
| ToExpr a => ToExpr (Sum a) # | |
| ToExpr a => ToExpr (Product a) # | |
| ToExpr a => ToExpr (First a) # | |
| ToExpr a => ToExpr (Last a) # | |
| ToExpr v => ToExpr (IntMap v) # | |
| ToExpr a => ToExpr (Tree a) # | |
| ToExpr v => ToExpr (Seq v) # | |
| ToExpr k => ToExpr (Set k) # | |
| ToExpr a => ToExpr (Hashed a) # | |
| ToExpr k => ToExpr (HashSet k) # | |
| (ToExpr a, Unbox a) => ToExpr (Vector a) # | |
| (ToExpr a, Storable a) => ToExpr (Vector a) # | |
| (ToExpr a, Prim a) => ToExpr (Vector a) # | |
| ToExpr a => ToExpr (Vector a) # | |
| (ToExpr a, ToExpr b) => ToExpr (Either a b) # | |
| (ToExpr a, ToExpr b) => ToExpr (a, b) # | |
| (ToExpr k, ToExpr v) => ToExpr (HashMap k v) # | |
| (ToExpr k, ToExpr v) => ToExpr (Map k v) # | |
| ToExpr (Proxy * a) # | |
| (ToExpr a, ToExpr b, ToExpr c) => ToExpr (a, b, c) # | |
| ToExpr a => ToExpr (Const * a b) # | |
| ToExpr a => ToExpr (Tagged * t a) # | |
| (ToExpr a, ToExpr b, ToExpr c, ToExpr d) => ToExpr (a, b, c, d) # | |
| (ToExpr a, ToExpr b, ToExpr c, ToExpr d, ToExpr e) => ToExpr (a, b, c, d, e) # | |
defaultExprViaShow :: Show a => a -> Expr #
An alternative implementation for literal types. We use show
representation of them.