# Qi is now "macro extensible"

**URL:** <https://racket.discourse.group/t/qi-is-now-macro-extensible/471>\
**Category:** Show & Tell\
**Created:** [December 24, 2021, 7:45pm UTC](https://racket.discourse.group/t/qi-is-now-macro-extensible/471 "2021-12-24T19:45:42Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)\
**Post date:** [December 24, 2021, 10:34pm UTC](https://racket.discourse.group/t/qi-is-now-macro-extensible/471/2 "2021-12-24T22:34:10Z")

</div>

This reminds me of the dream I had in [Experiment with defines: define unity](https://racket.discourse.group/t/experiment-with-defines-define-unity/314). Looking forward to see it come to fruition.

As an example, I would love a more performant/expressive way to handle the following: I have a flow that returns a mix of numbers and `#f`. I want to pass the numbers to `min`, but there may not be any numbers (in which case `min` barfs). The current solution is something like

```scheme
(~> … (pass number?) (if (~> count zero?) #f min))

```

The perf is not great: I don't need to count the (possibly large) number of values when I only need to know if there's at least one.

I suppose now I can implement this test "at least one value" as a qi macro.

---

_[View the full topic](https://racket.discourse.group/t/qi-is-now-macro-extensible/471)._
