arrows pointing right and left

Ambidexter questions

email Scott Turner


Although the goals of Ambidexter are stable, some aspects of the language are tentative. Comments and advice are welcome, particularly regarding the topics listed below.

  • impurity — This is not a pure functional language. Although Monadic I/O is supported, there are ways in which I/O effects can interact with the internals of non-I/O expressions. I'm pretty sure arrows can bring back purity. Perhaps uniqueness types would be an alternative. Another approach which I am favoring more and more is a hierarchy of continuation functors including pure evaluation and IO.
  • back end — Will need to integrate with a back end VM or compiler, with the goals of utility, portability, and support for concurrency. Maybe SEAM.
  • modules — Existentials may give decent hiding, but should they be tied to the file system, and if so how? From the opposite point of view, what should be tied to the file system? Limited to existentials? What about names, which is what everyone expects. I did some pretty good thinking about this at one point. Why didn't Haskell go with the ML approach?
  • separate compilation — What aspects of separate compilation facility would be first priority?
  • currying vs. passing tuples — The builtin functions are oriented toward currying the arguments. Would a version that passes multiple arguments using tuples succeed?
  • functions applied from right — This is an experiment, because my intuition has often told me that I'd like to read the argument before reading the thing which transforms it. Although it reads well in expressions, it does not fit together with the way curried types are written — in types the arguments are written in the order they are combined with a curried function, whereas in expressions they appear in the opposite order. Most people will find this unfamiliar, but other than that, are there reasons to switch function application to the usual order? Would there still be reasons if the library didn't use currying extensively?
  • by-name types — The type constructs are dual to the intuitive types when working from a by-name point of view. How good and bad would it be to add support for the dual types?

Support open standards!  
Valid XHTML 1.0!