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 regardsChanging the subject a wee bit, there's an operation familyin 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 neighbouringelements 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 muchI see how to do with transducers.�� But you can't get the desiredoverride for #successor:[sortBlock:][ifNone:] by overriding#select:thenFold:ifNone: in SortedCollection or SortedSet.�� So what*should* one do?