[racket-dev] Lists aren't sets, but have set-like operations

From: J. Ian Johnson (ianj at ccs.neu.edu)
Date: Wed Aug 21 19:08:13 EDT 2013

Okay, I can abide. However, that doesn't really get at my frustration. I'm using the set constructor, that appears to now be an immutable-custom-set with make-immutable-hash as its make-table. So what I'm looking for is not set?, but set-immutable?, as it's a distinct (family of) struct types that won't clash with the primitive data that I'm otherwise using.
----- Original Message -----
From: "Carl Eastlund" <cce at ccs.neu.edu>
To: "J. Ian Johnson" <ianj at ccs.neu.edu>
Cc: "dev" <dev at racket-lang.org>
Sent: Wednesday, August 21, 2013 6:58:56 PM GMT -05:00 US/Canada Eastern
Subject: Re: [racket-dev] Lists aren't sets, but have set-like operations

Ian, sets are now a generic datatype, like dictionaries. Association lists are dictionaries, and lists are now sets. They're also streams and sequences. They're not just "set-like". 

Carl Eastlund 

On Wed, Aug 21, 2013 at 6:56 PM, J. Ian Johnson < ianj at ccs.neu.edu > wrote: 

I just wasted about 2 hours tracking down a bug that ended up being due to (set? '()) now evaluating to #t. I have no problems with set-union, intersection, etc. being defined for lists, but to treat lists as sets always is perverse to me. The contracts for set operations should use set-like? for (or/c set? list?) and keep the two constructions separate. 

This conflation is almost as bad as treating empty list as false. 

Racket Developers list: 

Posted on the dev mailing list.