I just hit a bit of a snag. I have most of a mixfix implementation done, and
I got hung up on the following input:

  def _**_(a, b) = if b == 0 then 1 else a * (a ** (b - 1))

Once mixfix is implemented, things like "*" and "**" are just identifiers
followed by an open parenthesis, so the parser treats them as a procedure
application.

Possible resolutions:

1. Treat all procedures as arity-1, adopting the view that when a procedure
is applied to an argument having tuple type we apply the native calling
convention to the elements of the tuple (as previously discussed).

2. Adopt the view that a mixfix introduction changes the behavior of the *
token*, in that the parser immediately updates the state of the lexer to
advise it that new quasi-keywords have been bound in the current context.
This causes precedence to be bound on the token rather than the entity, and
therefore deviates from the Haskell specification significantly. I don't
feel like I have an intuition about how bad a thing that would be.

We can't defer application processing into the mixfix layer, because by that
point the parenthesis that were used syntactically to signal the presence of
application are long gone.

Before I make a mess that might be hard to back out of, can somebody explain
whether/why the entity/name distinction is important in Haskell mixfix? My
hope is that the ability to do a wholesale replacement on the current syntax
table provides a satisfactory alternative.


Thanks


shap
_______________________________________________
bitc-dev mailing list
[email protected]
http://www.coyotos.org/mailman/listinfo/bitc-dev

Reply via email to