successor of x in c = the smallest element of c that is larger than x min {y | y in c . y > x} predecessor of x in c = the largest element of c that is smaller than x max {y | y in c . y < x}
On Thu, 20 Apr 2023 at 21:08, Steffen Märcker <merk...@web.de> wrote: > Dear Richard, > > thanks for that additional piece. I'll put insert-<left/right> on my list > of possible variants. I think we come back to naming after the initial port > is done and everyone can play with it. Generally, I made the observation to > better be careful with names since it's too easy to alienate other or > trigger wrong assumptions. > > New topic! (quote below) > > Honestly, my knowledge of Haskell is rather limited and rusted. Hence, I > am having difficulties understanding what exactly these operations with a > sequence of elements. Can you give an example or some pseude/smalltalk code > from your use-case and library? > > Kind regards > > > Changing the subject a wee bit, there's an operation family > in my library, and I wonder how it would fit into Transducers? > To avoid bias, here's a specification in Haskell (for lists, > because I haven't had any luck installing Data.Witherable). > > uccessorBy, predecessorBy :: (a -> a -> Ordering) -> a -> [a] -> a > successor, predecessor :: Ord a => a -> [a] -> a > > successor = successorBy compare > > successorBy cmp x = minimumBy cmp . filter (\y -> cmp x y == LT) > > predecessor = predecessorBy compare > > predecessorBy cmp = successorBy (flip cmp) > > The reason these operations exist is to pick neighbouring > elements in SortedCollections and SortedSets. But they make > *sense* for any Enumerable. So there are "generic" > definitions with orderrides for those two classes. > > A filter + a reduce . Traditionally, a #select:thenFold:ifNone: > in order to avoid building an intermediate collection. That much > I see how to do with transducers. But you can't get the desired > override for #successor:[sortBlock:][ifNone:] by overriding > #select:thenFold:ifNone: in SortedCollection or SortedSet. So what > *should* one do? > >