-
Notifications
You must be signed in to change notification settings - Fork 15
Release Notes
Siddhartha Kasivajhula edited this page Jan 22, 2025
·
8 revisions
- Functional list operations are now matched literally instead of as datum literals, so that simply using
(filter f)and(map g)in flows will no longer mean that these operations will be deforested by Qi's compiler. Instead,(require qi/list)is necessary. Without this,filterandmapwould literally simply match the built-infilterandmapfromracket/base, and these would be usable simply as host language functions, including via templates and partial application. These will not be deforested. On the other hand,qi/list'smapandfiltersupport Qi syntax in higher-order positions, don't support application templates (i.e., fine and blanket templates, which are usable for host functions only), and will be deforested. -
(△ f)formerly accepted a list followed by any number of additional values that would be passed to each invocation offalong with the input list, to produce the result. Now, this instead accepts any number of lists as input, and corresponding elements of these lists are passed tofto produce each output value (resembling thezipoperation common in many functional programming languages).
Qi formerly was supported on Racket 8.3+. It now works on Racket 8.5+.
- Qi syntax matches patterns literally rather than as datums, so Qi forms must be explicitly required and in scope in order to be used. Additionally, identically-named identifiers from other languages would need to be disambiguated in the require form, for instance by using
prefix-in. - Mixing pure functions and undeclared effects (e.g. a
displaylnsomewhere inside a function) is no longer honored (use an explicit sideeffectinstead) - Higher-order functions that return functions to be used as flows now require an explicit
esc, where formerly we could omitescin this special case. - Formerly, Qi unintentionally accepted keyword arguments as flow inputs (e.g.
(~>> (#:key identity 2 1 3) (sort <))). Keyword arguments are always accepted in partial applications, fine and blanket templates, but they are no longer accepted as runtime inputs (e.g.(~>> (2 1 3) (sort #:key identity <))is still OK).
Home | Developer's Guide | Calendar | Events | Projects | Meeting Notes