-
Notifications
You must be signed in to change notification settings - Fork 13
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,filter
andmap
would literally simply match the built-infilter
andmap
fromracket/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
'smap
andfilter
support 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 off
along 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 tof
to produce each output value (resembling thezip
operation 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
displayln
somewhere inside a function) is no longer honored (use an explicit sideeffect
instead) - Higher-order functions that return functions to be used as flows now require an explicit
esc
, where formerly we could omitesc
in 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