Hi all — I’m investigating a native PPX rewrite edge case and wanted to confirm whether this is a known compiler limitation/bug.
Context
I am building rescript-solid: GitHub - Frank-III/rescript-solid
We have a native PPX that rewrites:
-
@show(works reliably) -
@defer(problematic when payload is JSX)
Current behavior:
- Explicit source works:
-
SolidJSX.ppxDefer(() => <p>...</p>)
-
- Auto rewrite of JSX `@defer` can fail:
-
@defer { <p>...</p> }→ rewritten by PPX →
with curried/uncurried error
-
Isolated repro
I created an isolated mini project at:
- `examples/defer-repro`
Repro file:
open Solid
@jsx.component
let make = () => {
let (count, _setCount) = createSignal(0)
<div>
<p>{string("Probe")}</p>
{@defer {
<p>{string("Deferred count: " ++ count()->Int.toString)}</p>
}}
</div>
}
Commands
Baseline (pass):
bun run -F solid-examples-defer-repro res:clean && bun run -F solid-examples-defer-repro res:build
Guarded rewrite mode (pass):
bun run -F solid-examples-defer-repro res:clean && RESCRIPT_SHOW_PPX_NATIVE_DEFER=1 bun run -F solid-examples-defer-repro res:build
Full JSX auto-rewrite mode (fails):
bun run -F solid-examples-defer-repro res:clean && RESCRIPT_SHOW_PPX_NATIVE_DEFER=1 RESCRIPT_SHOW_PPX_NATIVE_DEFER_JSX=1 bun run -F solid-examples-defer-repro res:build
Error
At examples/defer-repro/src/DeferRepro.res on the deferred JSX expression:
This function is a curried function where an uncurried function is expected