
Am 23.10.2016 um 10:52 schrieb Rik Howard:
Hi Richard
thank you for your reply. It is becoming apparent that my explanation can be made clearer. I'm investigating a language that takes something like core Haskell (a Lambda Calculus augmented with let blocks) to satisfy its pure function requirements but that takes a different approach when it comes to IO by employing procedures.
Are you aware how "monadic IO" became the standard in Haskell? It was one of three competing approaches, and AFAIK one turned out to be less useful, and the other simply wasn't ready in time (so it might still be interesting to investigate).
For IO, a procedure returns only 'okay' or an error via the mechanism that a function would use for returning values; the non-deterministic values returned by the procedure are done so with variable parameters.
What's the advantage here? Given the obvious strong disadvantage that it forces callers into an idiom that uses updatable data structures, the advantage better be compelling.
For example, to define a procedure to echo once from standard in to out:
echo = try (read string) (write string) error
The value coming from standard-in is to be captured in the 'string' out-variable and so is available to be written to standard-out, the 'try' built-in being analogous to 'if'.
What is the analogy? That stuff is evaluated only on a by-need basis? That's already there in Haskell.
Rough (inconsistent) examples exist; its grammar and type system are in a slightly better state but not yet written up properly. What I could quickly add as an appendix, I have but the notation needs to be made more standard for easier comparison. I am working on another paper that will address the need for a more-concrete and standard presentation. I hope that this goes some way to answering your questions; please say if it doesn't!
Right now I fail to see what's new&better in this. Regards, Jo