links
links copied to clipboard
Links: Linking Theory to Practice for the Web
This is a meta-issue to track the progress of upstreaming the new module system. My intention is that the current and new system should live side-by-side for a while to...
Illeity
I have been working towards an implementation for #571. While trying to understand what the behaviour of the current chaser/loader is, and in particular how it deals with some edge...
As discussed during the previous Links meeting, the current module system is causing some issues, and rather than treating it symptomatically, we ought to design and implement a proper module...
Consider the following (contrived) program: ``` mutual { fun bar() { 42 } fun baz() { 17 } fun foo(f){ f() } } foo(bar) ``` This should call foo, then...
It has long been a goal to be able to run the JavaScript code generated by the Links compiler in Node or other non-web JavaScript environment. To do so currently...
``` links> sig ++ : (Int, Int) -> Int op x ++ y { x + y }; links> (++); fun : (Int, Int) -> Int links> [] ++ [];...
Now that we can mark functions as frozen (#688), we can write mutual blocks with one frozen function and one non-frozen function, allowing definitions like: ``` mutual { ~fun f(x)...
We may want to unify a row type `{ foo{%p} | %e }` with some rigid row `{ |f }`. However, this is not currently supported. Ideally we could have...
For row variables we have kind `Row`. A row variable ranges over a cofinite set, however, we do not keep track of its finite complement, which means when a row...
Consider: ``` var f = id(id); sig g : forall a. (a) -> a fun g(x) { f(x) } ``` Initially f is given the type `(%t) -> %t` (as...