Comments (6)
Two possibilities for fixing this: a keyword argument for the equal? procedure, or a syntax parameter that holds the identifier.
from rhombus-prototype.
I'd lean towards an optional keyword.
Would a syntax parameter ever accidentally apply to situations where someone wants the normal equal-case behavior inside a clause of another case expression overridden for a different equality?
from rhombus-prototype.
eq?
, eqv?
, equal?
, and equal-always?
are all that apply to case
, right? (It can’t be an arbitrary procedure due to the dispatch algorithm used.) I’m not sure having an optional directive that recognizes exactly those identifiers is a better idea than having different versions of case
altogether.
from rhombus-prototype.
Maybe add a new case
variant to Racket, but in a racket/case
(or racket/case-always
) module instead of racket/base
or racket
?
from rhombus-prototype.
A new case variant seems like it would either require duplication of the case
implementation or internally providing a dispatched variant from the implementation in racket/private/case.rkt
.
from rhombus-prototype.
eq?
,eqv?
,equal?
, andequal-always?
are all that apply tocase
, right? (It can’t be an arbitrary procedure due to the dispatch algorithm used.)
I don't think it would need to be limited to those in principle, since it is possible to build custom hash tables, AVL trees, tries, range maps, etc. using arbitrary Racket code and syntax-local-lift-expression
their construction. Moreover, an internal data structure for this purpose could get even cleverer and represent itself strictly in terms of vectors and such just to get access to quotability if that's important.
Better than lifting or quoting might be to do a define/match
-like design—as in, to introduce a form for defining a function that immediately invokes case
on one of its arguments—so that the programmer knows exactly what "definition time" the data structure construction is performed at and can reposition it to wherever in their code they like it. Having a well defined "definition time" would even open up the potential for non-constant expressions in branch conditions, since those expressions could be documented to run specifically at definition time and in the definition site's lexical scope.
from rhombus-prototype.
Related Issues (20)
- Should multiple-value static infos live under a key? HOT 2
- Is `export` in `meta` supposed to work?
- `super` outside of a class uses wrong syntax object for error
- identifiers with dots in them HOT 4
- Module-path operators confuse Check Syntax
- `values` reducer incorerctly propagates initial-value static info HOT 3
- Improve static error for incorrect arities of subclass constructors HOT 1
- Some use of `Group` leads to “syntax class incompatible with this context”
- Alts after extra-indented blocks
- Not all macro options are allowed in pre-alts block position HOT 1
- Scope pruning in Rhombus blocks
- arity error in annot.macro implementation HOT 2
- Eager expansion of definitions’ right-hand sides can be detected HOT 1
- Unquoted matches are not available in the same pattern
- Use-site binder hygiene bug for `let` HOT 7
- A `let` before another `def` in the same block HOT 2
- Giant green blobs in DrRacket HOT 6
- punning doesn't work in presence of :~ or :: HOT 1
- Fallback option in veneers
- ad used, when "as" was probably better HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rhombus-prototype.