Rob Rix
c839a434e8
🔥 distribute.
2016-05-19 13:43:02 -04:00
Rob Rix
bf656592c1
🔥 pairRangesWithLine.
2016-05-19 13:42:58 -04:00
Rob Rix
f4923c63b7
🔥 spanAndSplitFirstLines.
2016-05-19 13:42:53 -04:00
Rob Rix
73746013fb
🔥 alignChildrenInRanges.
2016-05-19 13:42:46 -04:00
Rob Rix
20627f764f
Test alignBranch instead of alignChildrenInRanges.
2016-05-19 13:40:10 -04:00
Rob Rix
572082cacd
Diff Keyed nodes using alignBranch.
2016-05-19 13:38:24 -04:00
Rob Rix
64ac903f3f
Align branches within a copointed context.
2016-05-19 13:26:36 -04:00
Rob Rix
17d2e8fe62
Default the intersection assumption to True.
...
This fixes an issue where we dropped asymmetrical children on the
opposite side from earlier asymmetrical children when splitting up
deletions/insertions.
2016-05-19 12:39:43 -04:00
Rob Rix
4f13339838
🔥 some redundant bits of the comments.
2016-05-19 00:23:04 -04:00
Rob Rix
99d0496d72
Use first/second to advance asymmetrically before symmetrical children.
2016-05-18 17:22:02 -04:00
Rob Rix
78323c8183
Swap the order of the arguments to alignChildren.
2016-05-18 16:19:40 -04:00
Rob Rix
59ca7fd08b
Fix a missing bracket in a comment.
...
This was making bracket-matcher sad.
2016-05-18 16:15:44 -04:00
Rob Rix
a92f55a053
alignChildren returns the remaining children in the nonintersecting case.
2016-05-18 16:06:15 -04:00
Rob Rix
bb38c87015
Reformat alignChildren’s cases.
2016-05-18 16:03:37 -04:00
Rob Rix
a5960a164f
Factor the recursive call of alignChildren
into its where clause.
2016-05-18 16:02:38 -04:00
Rob Rix
59ff6fcccd
Handle an oxymoronic case to silence a warning (and in hope of future refactoring).
2016-05-18 15:57:32 -04:00
Rob Rix
6ce445068c
Move the symmetrical child test up a level.
...
This avoids redundancy with the does-anything-intersect-on-both-sides
case.
2016-05-18 15:51:49 -04:00
Rob Rix
5e1d111cac
Move the asymmetrical computation break
into the where clause.
2016-05-18 15:44:04 -04:00
Rob Rix
43a893e843
lineAndRemainingWhere
doesn’t imply any
.
2016-05-18 15:37:28 -04:00
Rob Rix
4592bb89e9
Move the supporting everything-is-asymmetrical definitions to the relevant case.
2016-05-18 15:28:47 -04:00
Rob Rix
95262b5eba
These aren’t documentation comments.
2016-05-18 14:55:31 -04:00
Rob Rix
39dfeab8e7
Take lines one at a time before asymmetrically-intersecting symmetrical children.
2016-05-18 13:00:39 -04:00
Rob Rix
1eac6d1302
We can simplify the symmetry test to isThese
.
2016-05-18 09:55:52 -04:00
Rob Rix
feef0e46b9
intersects
returns its result in the union of the shapes of ranges
and line
, not in the intersection of their shapes.
2016-05-17 16:41:01 -04:00
Rob Rix
249c417ba8
Only return lines when we have asymmetrical children on that side.
2016-05-17 16:39:15 -04:00
Rob Rix
e7e948e684
Add a wrapper for lineAndRemaining which takes a predicate.
2016-05-17 16:38:49 -04:00
Rob Rix
8c55ba57c6
The non-overlapping intersection case has the same shape as the ranges, not as the line.
2016-05-17 15:57:23 -04:00
Rob Rix
7cfdeff5e5
Intersections with empty children have the same shape as the ranges.
2016-05-17 15:04:09 -04:00
Rob Rix
b09abb7f10
Extract getRange to the top level.
2016-05-17 12:22:21 -04:00
Rob Rix
11bbde744a
Fix a shadowing error.
...
So maybe I shouldn’t be so comfortable with shadowing after all.
2016-05-17 12:18:47 -04:00
Rob Rix
5f481de057
Rename symmetricalChildren (since only the first, if any, is guaranteed to be symmetrical).
2016-05-17 12:13:14 -04:00
Rob Rix
363a96c527
Note a case we want to handle correctly.
2016-05-17 12:11:46 -04:00
Rob Rix
ef9cf21d03
Only process asymmetrical intersecting children.
2016-05-17 12:08:22 -04:00
Rob Rix
8ef363713e
Split the intersecting children into asymmetrical & symmetrical sublists.
2016-05-17 12:01:31 -04:00
Rob Rix
a380ae2147
Rename lines
to children
.
2016-05-16 14:46:23 -04:00
Rob Rix
e3d6cc9037
Drop empty children.
...
Fixes an issue where asymmetrical children were not being collected
into the top-level parent branch.
2016-05-16 13:26:09 -04:00
Rob Rix
2cbefee68b
Don’t reprocess the nonintersecting split-off first lines.
2016-05-16 12:57:01 -04:00
Rob Rix
555fd7d124
Correct the inverted boolean.
2016-05-14 01:30:49 -04:00
Rob Rix
65827f17ac
Correct the docs of why we pick left first.
2016-05-14 01:19:04 -04:00
Rob Rix
9cea134ee6
Call into alignBranch for Fixed nodes too.
2016-05-13 23:24:30 -04:00
Rob Rix
9b398ebd99
Avoid using head
.
2016-05-13 18:17:01 -04:00
Rob Rix
c0a1d5b14b
Only advance past lines we’ve actually taken.
2016-05-13 18:11:06 -04:00
Rob Rix
ebea3e1542
Align asymmetrically.
2016-05-13 18:07:41 -04:00
Rob Rix
97b8b7d4f8
lineAndRemaining takes its parameters in the opposite order.
2016-05-13 17:56:34 -04:00
Rob Rix
19870ee871
Add a function to produce a line and return the remaining lines.
2016-05-13 17:53:24 -04:00
Rob Rix
abd6221696
Pass headRanges to alignChildren instead of closing over it.
2016-05-13 17:42:17 -04:00
Rob Rix
de254b953f
Split up lines in the asymmetrical cases in alignChildren.
2016-05-13 17:38:54 -04:00
Rob Rix
b19f6fe81a
Split the first-line-to-Both-terms stuff into a function.
2016-05-13 17:34:28 -04:00
Rob Rix
0f2467e82a
Handle the asymmetric cases disjointly.
2016-05-13 17:32:31 -04:00
Rob Rix
25831c5685
Test the intersections by side explicitly.
2016-05-13 17:31:21 -04:00
Rob Rix
312d9aec26
Use the existing definition of intersects
.
2016-05-13 17:29:37 -04:00
Rob Rix
eecca41524
Correct the type of children.
2016-05-13 17:27:41 -04:00
Rob Rix
a624678778
alignChildren recurs in the symmetrical case.
2016-05-13 17:18:09 -04:00
Rob Rix
28c0672afd
Use alignChildren to grab the first lines, then recur.
2016-05-13 17:16:11 -04:00
Rob Rix
f8b07fecae
Stub in recursively selecting & splitting the first lines of children.
2016-05-13 17:15:45 -04:00
Rob Rix
d166581f37
Handle the degenerate case of intersects.
2016-05-13 16:52:42 -04:00
Rob Rix
8fecee4b83
We don’t use the nonintersecting children.
2016-05-13 16:52:10 -04:00
Rob Rix
2da3548b8b
Stub in the asymmetrical/symmetrical alignment choice.
2016-05-13 16:51:50 -04:00
Rob Rix
d351fb5497
Handle the case where no children intersect on either side.
2016-05-13 16:46:53 -04:00
Rob Rix
3357dc5f82
Stub in an alignBranch function.
2016-05-13 16:40:46 -04:00
Rob Rix
df043b52b8
Stub in some type synonyms.
2016-05-13 16:40:38 -04:00
Rob Rix
8862fc35c1
Write down some properties we’d like to hold.
2016-05-13 16:40:18 -04:00
Rob Rix
b9673bb0ee
Write down some overall behaviours we expect.
2016-05-13 16:40:10 -04:00
Rob Rix
7a4f2b98c8
Write down some notes about alignSyntax.
2016-05-13 16:39:48 -04:00
joshvera
48c7498ce2
Define Term in terms of Cofree
2016-05-04 14:37:24 -04:00
joshvera
9f8fc439b3
typealias Annotated to CofreeF
2016-05-03 14:19:10 -04:00
joshvera
6c07d4dc55
WIP CofreeF
2016-05-03 12:17:38 -04:00
Rob Rix
e70a50720c
alignChildrenInRanges always exhausts its inputs, so call it instead.
2016-04-27 17:44:15 -04:00
Rob Rix
7413c72876
Count up in Both.
...
This is clunkier, but as @rachelmyers pointed out, it avoids the need
to reason on `increment` case-by-case.
For the same reason, it avoids the possibility of maintenance changing
`increment` in such a way that the selection of `first`/`second` falls
out of sync with the pattern being matched on; thus, it’s more
resilient to change.
2016-04-26 17:36:00 -04:00
Rob Rix
13d23e8d2d
Parens, not $.
2016-04-26 16:31:39 -04:00
Rob Rix
25f25c3fcb
Apply the increment function.
2016-04-26 16:31:33 -04:00
Rob Rix
808cf59fe5
Add a function to increment only the side we have a line on.
2016-04-26 16:30:57 -04:00
Rob Rix
85b1918224
Export applyThese/modifyJoin 😞
2016-04-25 14:42:38 -04:00
Rob Rix
1e94f493c9
Reincorporate nextLines into the computation of thisRanges.
2016-04-25 12:06:30 -04:00
Rob Rix
c8903aefe7
Inline the definition of put
.
2016-04-25 12:00:33 -04:00
Rob Rix
df011fef9e
Generalize distribute
to arbitrary functors.
2016-04-25 11:38:35 -04:00
Rob Rix
36381cb432
Simplify the implementation of distribute.
2016-04-25 11:38:10 -04:00
Rob Rix
390302ae9d
Document distribute
.
2016-04-25 11:33:13 -04:00
Rob Rix
76f0b6fb0c
Rename invertEmbedding to distribute.
2016-04-25 11:26:20 -04:00
Rob Rix
ccb7568d3e
Align within a copointed functor to handle Keyed nodes.
2016-04-25 11:25:32 -04:00
Rob Rix
6b07bdf795
Add a function to invert the embedding of a copointed functor around Join These.
2016-04-25 11:19:51 -04:00
Rob Rix
d2dae5824d
Expect children to be in a copointed context.
2016-04-22 12:18:40 -04:00
Rob Rix
f48a47ce8f
Simplify prepending the tail.
2016-04-22 11:59:00 -04:00
Rob Rix
3fb4ad04fc
uncons the first/next lines in the spanning pass.
2016-04-22 11:57:38 -04:00
Rob Rix
76f46ebb02
No need to re-cons the lines of nonintersecting children.
2016-04-22 11:48:08 -04:00
Rob Rix
3a130c9a66
Derive a Functor instance for Union.
2016-04-22 10:39:15 -04:00
Rob Rix
87f99998c9
split via a pattern guard.
2016-04-22 10:39:03 -04:00
Rob Rix
9b6f3f181c
Revert "Align within an Alternative context."
...
This reverts commit d656d819158b3a31c874a8393757fde6f5deca6e.
2016-04-15 13:00:42 -04:00
Rob Rix
8949bc8a27
Align within an Alternative context.
2016-04-15 12:46:28 -04:00
Rob Rix
ffecacadab
Rename catThese to unionThese.
2016-04-15 12:45:33 -04:00
Rob Rix
c54924f3ea
Define catThese over Alternative Foldable functors.
2016-04-15 12:44:04 -04:00
Rob Rix
2974e5f42d
Correct catThese.
2016-04-15 12:38:17 -04:00
Rob Rix
23f487ae35
Union wraps Join These.
2016-04-15 12:15:47 -04:00
Rob Rix
7c8354f862
Revert "Hide Alt."
...
This reverts commit a43afb89898b918c06834e92ade43113e74fd35f.
2016-04-15 11:57:26 -04:00
Rob Rix
7fa9fa1238
Hide Alt.
2016-04-15 11:28:43 -04:00
Rob Rix
e52f5c9b4c
Simplfiy catThese slightly.
2016-04-15 11:06:11 -04:00
Rob Rix
d82931a5f5
Don’t map Keyed children into lists.
2016-04-15 10:01:50 -04:00
Rob Rix
e316da1b88
Abstract the Alignment machinery over a Foldable instance.
2016-04-15 10:00:42 -04:00
Rob Rix
5ec7f6cc77
This case no longer arises.
2016-04-15 10:00:21 -04:00
Rob Rix
169dbea2a5
Use the local this/that bindings.
2016-04-15 09:37:01 -04:00
Rob Rix
ff54948c7b
📝 intersects.
2016-04-15 09:35:41 -04:00
Rob Rix
012425b11a
Move intersectsRange to Range.
2016-04-15 09:34:34 -04:00
Rob Rix
e0f6c2ae2d
splitThese returns its results in Maybe.
...
The uses of fromJust are as bad as the use of head, unfortunately.
2016-04-15 09:33:30 -04:00
Rob Rix
88d6fc08d4
Rename split → splitThese.
2016-04-15 09:31:43 -04:00
Rob Rix
940ad0ac82
📝 split.
2016-04-15 09:31:28 -04:00
Rob Rix
c585ca95d6
📝 modifyJoin.
2016-04-15 09:30:20 -04:00
Rob Rix
5e5e9fe7c8
🔥 the separate apThese function.
2016-04-15 09:29:23 -04:00
Rob Rix
8b3833b7ff
📝 Union.
2016-04-15 09:27:41 -04:00
Rob Rix
7ceaea76c8
Group the instances at the bottom.
2016-04-15 09:26:16 -04:00
Rob Rix
056b9647e8
🔥 Row.
2016-04-15 09:25:27 -04:00
Rob Rix
d7ed0bc74d
Move the Union newtype up.
2016-04-15 09:23:41 -04:00
Rob Rix
ac26367e2d
Rephrase the advance function in terms of catThese.
2016-04-14 22:23:26 -04:00
Rob Rix
a61d847705
Replace Data.Bifunctor.These and Data.Align with the these
package.
2016-04-14 22:00:00 -04:00
Rob Rix
84abff8773
Move the extras atop These into Alignment.
2016-04-14 21:47:18 -04:00
Rob Rix
6662deac2b
🔥 the old split… code paths.
2016-04-14 21:16:10 -04:00
Rob Rix
3235cfee3a
Define renderers in terms of alignDiff
.
2016-04-14 21:16:02 -04:00
Rob Rix
7c63e92ea7
Construct SplitPatches.
2016-04-14 20:27:24 -04:00
Rob Rix
3e1072f714
Use record syntax to update info.
2016-04-14 19:40:49 -04:00
Rob Rix
0142a54dcf
Move the getRange function to SplitDiff.
2016-04-14 18:36:09 -04:00
Rob Rix
c955c94729
Move alignDiff up.
2016-04-14 17:03:53 -04:00
Rob Rix
ad4d1ab9e4
Pair with the ranges appropriate for the intersecting elements.
...
This is gross.
2016-04-14 16:34:49 -04:00
Rob Rix
8052414634
Parens I guess.
2016-04-14 13:31:07 -04:00
Rob Rix
919fab9053
Reformat alignChildrenInRanges for less indentation.
2016-04-14 13:19:18 -04:00
Rob Rix
23cca50048
Rename group2 to alignChildrenInRanges.
2016-04-14 13:18:19 -04:00
Rob Rix
ce33d56086
🔥 a redundant blank line.
2016-04-14 13:15:27 -04:00
Rob Rix
e3ace6408c
Merge branch 'master' into cofree-and-bifunctors-sitting-in-a-tree-a-l-i-g-n-edly
...
# Conflicts:
# test/AlignmentSpec.hs
# test/PatchOutputSpec.hs
2016-04-14 12:57:45 -04:00
Rob Rix
8c9a9c7586
🔥 mask.
2016-04-14 12:46:25 -04:00
Rob Rix
1656f93f65
🔥 spanThese.
2016-04-14 12:46:05 -04:00
Rob Rix
8a781d0edf
🔥 unconsThese.
2016-04-14 12:16:45 -04:00
Rob Rix
5a80999a1f
Rearrange/rename the bindings a little.
2016-04-14 12:13:41 -04:00
Rob Rix
e5a3683c72
Implement applyThese in terms of apThese.
2016-04-14 12:08:37 -04:00
Rob Rix
17728c5f6d
Implement catThese in terms of Union.
2016-04-14 12:05:52 -04:00
Rob Rix
ec4ff0cf14
Use catThese to merge lines.
2016-04-14 11:54:58 -04:00
Rob Rix
df898f3489
Rename mergeThese to catThese.
2016-04-14 11:54:50 -04:00
Rob Rix
282a993651
Add a mergeThese function to concatenate [Join These a] into Join These [a].
2016-04-14 09:59:46 -04:00
Rob Rix
fcaa498033
Use sequenceL to invert the embedding of Join These (Maybe a) to Maybe (Join These a)
2016-04-14 09:50:44 -04:00
Rob Rix
345ac1b38a
Use maybeThese to avoid the need for unconsThese.
2016-04-14 09:40:49 -04:00
Rob Rix
0867ae807f
Implement group2 in terms of spanAndSplitLines.
2016-04-13 16:06:11 -04:00
Rob Rix
2ac2f6e5c9
Handle the empty case.
2016-04-13 16:05:56 -04:00
Rob Rix
0ea6286197
Split the body of spanAndSplitFirstLines onto a newline and dedent.
2016-04-13 16:05:48 -04:00
Rob Rix
b8bc77bb7f
Return the heads/tails of children paired.
2016-04-13 11:47:35 -04:00
Rob Rix
747bfbf454
Return a list of nonintersecting children too.
2016-04-13 11:41:49 -04:00
Rob Rix
de05043c67
Span and split the intersecting first lines.
2016-04-13 11:08:01 -04:00
Rob Rix
7d11abd92a
Split things up over several lines.
2016-04-12 17:58:54 -04:00
Rob Rix
dbe65d6831
Update the info with record syntax.
2016-04-12 17:56:52 -04:00
Rob Rix
0f8b6cea8d
Preserve branch term sizes through splitting.
2016-04-12 10:48:30 -04:00
Rob Rix
852fa1f207
Preserve term sizes through splitting.
2016-04-12 10:42:44 -04:00
Rob Rix
71e8454fb4
Add a size field to Info.
2016-04-11 15:02:58 -04:00
Rob Rix
2f241803af
Revert "Rewrite group2 in terms of spanIntersecting."
...
This reverts commit 3f808c548a6980b2ae35ec2fb7ea1dd249707668.
2016-04-11 12:06:02 -04:00
Rob Rix
48264b1cb3
Revert "Don’t bind tailRanges."
...
This reverts commit dcacd86ccb12fa11b603e0e7468614551104742e.
2016-04-11 12:04:34 -04:00
Rob Rix
fe7301ba3a
Revert "Bind lists of intersecting & nonintersecting children."
...
This reverts commit 2453b500adc0774ab5311ca1eca946806b2bb9c9.
2016-04-11 12:04:19 -04:00
Rob Rix
87b699c09a
Bind lists of intersecting & nonintersecting children.
2016-04-08 16:44:09 -04:00
Rob Rix
ec8fc5e7e7
Advance both sides if there are no unfinished children.
2016-04-08 15:22:09 -04:00
Rob Rix
efe7d43a59
Don’t bind tailRanges.
2016-04-08 15:06:00 -04:00
Rob Rix
20797a35c8
Use pairRangesWithLine to avoid unpacking Maybe.
2016-04-08 15:04:26 -04:00
Rob Rix
8c9a8906da
Rewrite group2 in terms of spanIntersecting.
2016-04-08 15:00:17 -04:00
Rob Rix
338bfff7c3
spanMergeable returns left/right separately.
2016-04-08 14:53:52 -04:00
Rob Rix
65157c54f2
Document spanThese.
2016-04-08 12:06:19 -04:00
Rob Rix
dcd9431987
Add a spanThese function.
2016-04-08 12:04:01 -04:00
Rob Rix
eae8cf480b
Coalesce the patterns.
2016-04-04 18:06:54 -04:00
Rob Rix
23a2e300ae
intersects
takes a single line.
2016-04-04 18:05:46 -04:00
Rob Rix
20c7578807
Consume all of the lines in group2
.
2016-04-04 17:56:53 -04:00
Rob Rix
06dd79dc76
Align patches.
2016-04-04 17:26:40 -04:00
Rob Rix
0132f180ed
🔥 an extra commented-out line.
2016-04-04 17:20:54 -04:00
Rob Rix
84fc0a54a9
Implement alignPatch over Delete/Insert.
2016-04-04 17:20:21 -04:00
Rob Rix
881d902d3c
Abstract alignSyntax over an Applicative instance.
...
This involves the use of a function which maps that functor into `Join
These`.
2016-04-04 17:18:29 -04:00
Rob Rix
c9fb18f128
🔥 the commented-out alignTerm.
2016-04-04 16:43:57 -04:00
Rob Rix
d2beafdc84
🔥 Both.unzip.
2016-04-04 16:25:16 -04:00
Rob Rix
df4247d0c9
alignSyntax takes the infos and syntax unpacked.
2016-04-04 15:54:38 -04:00
Rob Rix
013bf6e1c0
Extract alignSyntax to the top level.
2016-04-04 15:49:22 -04:00
Rob Rix
5ffd45ebe5
🔥 the old commented-out alignSyntax
.
2016-04-04 15:47:43 -04:00
Rob Rix
f7c4c91cfe
Align Fixed
nodes.
2016-04-04 15:22:14 -04:00
Rob Rix
6856151fe5
Extract a wrapInBranch function to construct branches.
2016-04-04 15:21:57 -04:00
Rob Rix
9476b1226d
🔥 the huge comment block.
2016-04-04 13:35:04 -04:00
Rob Rix
261cb17a9a
🔥 advanceLeft/advanceRight.
2016-04-04 13:34:43 -04:00
Rob Rix
cd1601efbe
Always advance on the intersecting side.
2016-04-04 13:34:21 -04:00
Rob Rix
16b08e3327
Advance along the sides that the child actually occupied.
2016-04-04 13:27:38 -04:00
Rob Rix
1f367274e7
advanceLeft/advanceRight are simple bifunctorial functions.
2016-04-04 13:21:05 -04:00
Rob Rix
522fd02b59
Rename first to firstLine.
2016-04-04 13:19:58 -04:00
Rob Rix
3d4f9a83f0
Use mask
to select only the sides that the original child had.
2016-04-04 12:44:05 -04:00
Rob Rix
bb38e3dfa6
Add yet another gross function, this time to mask These with another These.
...
This is a bit like some bimap version of <$.
2016-04-04 12:43:32 -04:00
Rob Rix
8971b40e77
Take both sides when merging.
2016-04-04 12:43:11 -04:00
Rob Rix
7e23ffd86f
Concatenate the unused side after splitting.
...
I suspect this will behave identically, but it is slightly more
accurate to our intention.
2016-04-01 16:04:55 -04:00
Rob Rix
1b1e88b4fd
Define pairRangesWithLine
over a Monoid instance to be total.
2016-04-01 10:56:44 -04:00
Rob Rix
8104f174ab
Extract pairRangesWithLine
to the top level.
2016-04-01 10:55:25 -04:00
Rob Rix
410a3044f9
Extract advanceLeft/advanceRight to top level.
2016-04-01 10:40:39 -04:00
Rob Rix
a582931a52
fmap outside of pairRangesWithLine.
2016-03-31 18:15:04 -04:00
Rob Rix
24ad721189
Rename atLeft/Right to advanceLeft/Right.
2016-03-31 18:08:02 -04:00
Rob Rix
3c11287729
🔥 maybeThese.
2016-03-31 18:00:03 -04:00
Rob Rix
6b00768ddf
🔥 spanMergeable.
2016-03-31 17:59:50 -04:00
Rob Rix
20ba0e37fd
Rename pairRangeWithLine to pairRangesWithLine.
2016-03-31 17:44:10 -04:00
Rob Rix
2bc86aec0b
Fix some misindentation.
2016-03-31 17:43:06 -04:00
Rob Rix
4878ed27df
Split up children when merging asymmetrically.
2016-03-31 17:15:34 -04:00
Rob Rix
a56219d4d8
Lazily bind the splitting of the first line of the child.
2016-03-31 17:13:22 -04:00
Rob Rix
507595eed5
Only recur via the separate pattern.
2016-03-31 17:11:01 -04:00
Rob Rix
daca37bc24
Recur via a separate pattern.
...
This reverts commit 985ad3d43055c0773e85623db4a29fda8656ddbb.
2016-03-31 17:10:25 -04:00
Rob Rix
7442a180d6
group2 advances through the list of children.
2016-03-31 16:07:11 -04:00
Rob Rix
f1dea045e0
Rename the restOfChild binding to remainingLines.
2016-03-31 15:58:17 -04:00
Rob Rix
293d27d123
🔥 redundant parens.
2016-03-31 15:38:38 -04:00
Rob Rix
dea54b6790
Rename x to pairRangeWithLine.
2016-03-31 15:38:27 -04:00