
On Sun, 20 Dec 2020, Ignat Insarov wrote:
I am looking for a place where I can find or put some simple functions that I expect but do not find in the `containers` or elsewhere in the standard libraries.
I have my own utility library for such functions. However, it does not and shall not depend on 'containers'.
Some examples I have in mind:
* Group a collection by an equivalence relation:
classify ∷ Ord π ⇒ (a → π) → [a] →a]]
If the grouped elements must be consecutive then I have Data.List.Key.group. But I guess, that Ord means that you want to group all elements with the same key in one group. Then I would use Map anyway for representing the result.
* From a finite map, get a map from its range to its fibers:
fibers ∷ (Ord k, Ord v) ⇒ Map k v → Map v (NonEmpty k)
* Put a type into the diagonal of its square:
diagonal = λx → (x, x)
I have Data.Tuple.HT.double. But recently the name 'dup' was discussed here.