@@ -61,22 +61,18 @@ data SplitRec : List a -> Type where
6161 (lrec : Lazy (SplitRec lefts)) ->
6262 (rrec : Lazy (SplitRec rights)) -> SplitRec (lefts ++ rights)
6363
64−total
65−splitRecFix : (xs : List a) -> ((ys : List a) -> Smaller ys xs -> SplitRec ys) ->
66− SplitRec xs
67−splitRecFix xs srec with (split xs)
68− splitRecFix [] srec | SplitNil = SplitRecNil
69− splitRecFix [x] srec | SplitOne = SplitRecOne
70− splitRecFix (x :: (ys ++ (y :: zs))) srec | SplitPair
71− = let left = srec (x :: ys) (smallerLeft ys y zs)
72− right = srec (y :: zs) (smallerRight ys zs) in
73− SplitRecPair left right
74−
7564||| Covering function for the `SplitRec` view
7665||| Constructs the view in O(n lg n)
7766export total
7867splitRec : (xs : List a) -> SplitRec xs
79−splitRec = sizeInd splitRecFix
68+splitRec xs with (sizeAcc xs)
69+ splitRec xs | acc with (split xs)
70+ splitRec [] | acc | SplitNil = SplitRecNil
71+ splitRec [x] | acc | SplitOne = SplitRecOne
72+ splitRec (y :: ys ++ z :: zs) | Access acc | SplitPair
73+ = SplitRecPair
74+ (splitRec (y :: ys) | acc (y :: ys) (smallerLeft ys z zs))
75+ (splitRec (z :: zs) | acc (z :: zs) (smallerRight ys zs))
8076
8177||| View for traversing a list backwards
8278public export
@@ -115,7 +111,7 @@ filteredROK p x xs = LTESucc (filterSmaller xs)
115111||| Constructs the view in O(n lg n)
116112export
117113filtered : (p : a -> a -> Bool) -> (xs : List a) -> Filtered p xs
118−filtered p inp with (accessible inp)
114+filtered p inp with (sizeAcc inp)
119115 filtered p [] | with_pat = FNil
120116 filtered p (x :: xs) | (Access xsrec)
121117 = FRec (filtered p (filter (\y => p y x) xs) | xsrec _ (filteredLOK p x xs))