On Sun, Jan 20, 2013 at 11:39 AM, Ertugrul Söylemez <es@ertes.de> wrote:
> What is the state of container libraries?  I am looking for a library
> which provides:
>
> * unordered containers (for "operational" type safety, I don't want to
> impose orders on things that don't have them -- unordered containers
> does this)

You are imposing an order.

I mean I don't want Ord instances for types with no "natural" order.  I don't mind that a container structure will impose the topological order, or that containers can be ordered by inclusion.

In particular, I have datatypes whose values represent incomparable "atoms" of some type.  A comparison between them should "really" yield bottom.  So an Ord-based container is not appropriate.  I'd rather not have an Ord instance for these types and therefore statically eliminate that bottom.
 


> * can handled nested containers (containers does that)
> * can be serialized easily, or better yet, has Generic instances
>
> Does such a library exist?  What are you using for Set and Map needs?

What's wrong with 'containers' itself?  I prefer Map/Set over
HashMap/HashSet, because the speed difference is small and only
noticable for large maps/sets.  If you need multiple indices, there is
IxSet.

I took a look at 'hashmap', which uses 'hashable' and 'containers' to implement hash containers.  I worried about the performance, and thought I'd ask for opinions on containers.

My goal is to create an IxSet-like structure which can handle unordered types, and preferably whose indices can be derived GHC.Generics-ally.