You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Oct 24, 2023. It is now read-only.
refmt (and reason-tools) fail to convert this sanely, e.g.:
OCaml
let(=>)xf= x >>=funr -> return (f r)
Reason
let (=>) = (x, f) => x >>= ((r) => return(f(r)));
The generated Reason code is invalid. Opal's custom fat-arrow operator is silently left unchanged, which collides with Reason's choice to switch arrow function definition from thin arrow to fat arrow. This causes obscure syntax errors later in the code at opal's point-of-use of its custom => operator. (See use in chainr1)
Suggestions
At minimum, refmt shouldn't let this invalid conversion pass silently – a warning or error should result. As crazy-making as it seems, a policy of swapping custom => (OCaml) for custom -> (Reason) would at least allow a consistent automatic conversion and be guaranteed to not collide with some other user-defined OCaml operator.
The text was updated successfully, but these errors were encountered:
Summary
refmt
doesn't convert uses of an OCaml custom fat arrow operatorlet (=>) ...
to Reason sensibly.Details and Example
The opal parser combinator defines the infix operator
=>
: see opal.ml line 81.refmt
(and reason-tools) fail to convert this sanely, e.g.:OCaml
Reason
The generated Reason code is invalid. Opal's custom fat-arrow operator is silently left unchanged, which collides with Reason's choice to switch arrow function definition from thin arrow to fat arrow. This causes obscure syntax errors later in the code at opal's point-of-use of its custom
=>
operator. (See use inchainr1
)Suggestions
At minimum,
refmt
shouldn't let this invalid conversion pass silently – a warning or error should result. As crazy-making as it seems, a policy of swapping custom=>
(OCaml) for custom->
(Reason) would at least allow a consistent automatic conversion and be guaranteed to not collide with some other user-defined OCaml operator.The text was updated successfully, but these errors were encountered: