| Copyright | (c) David Fox (2015) |
|---|---|
| License | BSD 3 Clause |
| Maintainer | s.clover@gmail.com |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Data.Algorithm.DiffContext
Description
Generates a grouped diff with merged runs, and outputs them in the manner of diff -u
Synopsis
- type ContextDiff c = [Hunk c]
- type Hunk c = [Diff [c]]
- getContextDiff :: Eq a => Maybe Int -> [a] -> [a] -> ContextDiff (Numbered a)
- prettyContextDiff :: Doc -> Doc -> (Numbered c -> Doc) -> ContextDiff (Numbered c) -> Doc
- prettyContextDiffOld :: Doc -> Doc -> (c -> Doc) -> ContextDiff c -> Doc
- getContextDiffNumbered :: Eq a => Maybe Int -> [Numbered a] -> [Numbered a] -> ContextDiff (Numbered a)
- data Numbered a = Numbered Int a
- numbered :: [a] -> [Numbered a]
- unnumber :: Numbered a -> a
- unNumberContextDiff :: ContextDiff (Numbered a) -> ContextDiff a
- groupBy' :: (a -> a -> Bool) -> [a] -> [[a]]
Documentation
type ContextDiff c = [Hunk c] Source #
Arguments
| :: Eq a | |
| => Maybe Int | Number of context elements, Nothing means infinite |
| -> [a] | |
| -> [a] | |
| -> ContextDiff (Numbered a) |
> let textA = ["a","b","c","d","e","f","g","h","i","j","k"] > let textB = ["a","b","d","e","f","g","h","i","j"] > let diff = getContextDiff (Just 2) textA textB > prettyContextDiff (text "file1") (text "file2") (text . unnumber) diff --- file1 +++ file2 @@ -1,5 +1,4 @@ a b -c d e @@ -9,3 +8,2 @@ i j -k
Arguments
| :: Doc | Document 1 name |
| -> Doc | Document 2 name |
| -> (Numbered c -> Doc) | Element pretty printer |
| -> ContextDiff (Numbered c) | |
| -> Doc |
Pretty print a ContextDiff in the manner of diff -u.
Arguments
| :: Doc | Document 1 name |
| -> Doc | Document 2 name |
| -> (c -> Doc) | Element pretty printer |
| -> ContextDiff c | |
| -> Doc |
Pretty print without line numbers.
Instances
| Show a => Show (Numbered a) Source # | |
| Eq a => Eq (Numbered a) Source # | |
| Ord a => Ord (Numbered a) Source # | |
Defined in Data.Algorithm.DiffContext | |
unNumberContextDiff :: ContextDiff (Numbered a) -> ContextDiff a Source #
If for some reason you need the line numbers stripped from the result of getContextDiff for backwards compatibility.
groupBy' :: (a -> a -> Bool) -> [a] -> [[a]] Source #
A version of groupBy that does not assume the argument function
is transitive. This is used to partition the Diff list into
segments that begin and end with matching (Both) text, with and
have non-matching (First and Second) text in the middle.
let notBoth1 a b = not (a == 1 || b == 1) in groupBy' notBoth1 [1,1,2,3,1,1,4,5,6,1] [[1],[1,2,3,1],[1,4,5,6,1]] groupBy notBoth1 [1,1,2,3,1,1,4,5,6,1] [[1],[1,2,3],[1],[1,4,5,6],[1]]
In the first result the list is split anywhere there are two adjacent ones, as desired.