Downloads provided by UsageCounts
# OOPSLA'22 Paper Artifact: First Class Names for Effect Handlers Docker image: daanx/oopsla22-namedh:1.0 Digest: sha256:d15cf6b8a105160e550eaa64c639b97289504cf7fe5bf6c54000ce84b730891a # Getting Started We provide a docker image to run the examples of the paper. ``` > docker pull daanx/oopsla22-namedh:1.0 > docker run -it daanx/oopsla22-namedh:1.0 ``` We now see the koka interpreter prompt as: ``` _ _ | | | | | | _ ___ | | _ __ _ | |/ / _ \| |/ / _' | welcome to the koka interactive compiler | ( (_) | ( (_| | version 2.4.1, Jul 11 2022, libc x64 (gcc) |_|\_\___/|_|\_\__,_| type :? for help, and :q to quit loading: std/core loading: std/core/types loading: std/core/hnd > ``` We can then see the provided examples by typing `:l samples/named-handlers/` `<tab>`: ``` > :l samples/named-handlers/ 1 net/ 4 file.kk 7 file-scoped.kk 2 ask.kk 5 heap.kk 3 net.kk 6 unify.kk ``` When loading `ask.kk` for example we see: ``` > :l samples/named-handlers/ask.kk compile: samples/named-handlers/ask.kk loading: std/core loading: std/core/types loading: std/core/hnd check : samples/named-handlers/ask modules: samples/named-handlers/ask > ``` and we can run each sample by running `main()`: ``` > main() check : interactive check : interactive add default effect for std/core/exn linking: interactive created: .koka/v2.4.1/gcc-debug/interactive hello world ``` We can see the highlighted source of each sample using the `:s` command. We can see the inferred type of an expression by using the `:t <expr>` command. Exit the interpreter (and container) by using the `:q` command. # Step-by-Step Guide The included examples are: 1. `ask.kk`: A simple reader effect discussed in Section 2.2 of the paper 2. `file.kk`: A non-scoped file effect discussed in Section 2.3.1 (and Figure 1) 3. `file-scoped.kk`: A scoped file effect. This is not directly discussed in the paper but very similar to the scoped reader of Figure 4. 4. `heap.kk`: A first-class heap discussed in Section 3.2.4 (and Figure 5) 5. `unify.kk`: A unification effect discussed in Section 7.2 6. `net.kk`: A neural network discussed in Section 7.1 Each of these show aspects of the named handler design as discussed in the paper, like named handlers, scoped handlers, rank-2 types, etc. ## Ask This is the reader effect discussed in Section 2.2. The output should look like: ``` > :l samples/named-handlers/ask.kk ... > main() ... hello world ``` ## File A non-scoped file effect discussed in Section 2.3.1 and Figure 1. Reads the first lines of `artifact1.txt` and `artifact2.txt`. The output should look like: ``` > :l samples/named-handlers/file.kk ... > main() ... Hello world! ``` ## File-Scoped A scoped file effect. This is not directly discussed in the paper but very similar to the scoped reader of Figure 4. The output should look like: ``` > :l samples/named-handlers/file-scoped.kk ... > main() ... artifact1.txt: line 1 artifact2.txt: line 1 ``` It is interesting to uncomment the "wrong" functions at the end of the source to see the static compile time errors that result when a file escapes its scope (see the later section on how to modify sources and run them). ## Heap A first-class heap with scoped references discussed in Section 3.2.4. This demonstrates we can model first-class polymorphic heaps with just (named) handlers. ``` > :l samples/named-handlers/heap.kk ... > main() ... 42 ``` ## Unify The unification example discussed in Section 7.2. ``` > :l samples/named-handlers/unify.kk ... > main() ... unified type: list int -> list int ``` ## Net The neural network example discussed in Section 7.1. ``` > :l samples/named-handlers/net.kk ... > main() ... epochs 1: (1, 1): Var(data: [0.65791339619326994], grad: [1] ) epochs 100: (1, 1): Var(data: [0.51198566799805911], grad: [1] ) ... epochs 4900: (1, 1): Var(data: [0.067684855309453493], grad: [1] ) epochs 5000: (1, 1): Var(data: [0.066819144610864939], grad: [1] ) ``` The sampling is randomized so the actual numbers will be different from run to run. The sample also generates the files `./netplot/plot.py` and `./netplot/data.json` which can be used to see the "learned" sine function. To see the plot graphically, you should exit the interpreter (with `:q`), get the docker container name, and use that to copy the generated files out of the container onto the local file system: ``` > docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8fa5d65107b7 daanx/oopsla22-namedh:1.0 "koka" 24 hours ago Exited (0) 24 hours ago gifted_saha ... > docker cp gifted_saha:/build/koka/netplot/plot.py plot.py > docker cp gifted_saha:/build/koka/netplot/data.json data.json ``` (here the name `gifted_saha` will be something else that was generated on your system). Now one can run Python locally to render a plot: ``` > python3 plot.py ``` # Changing The Examples You can start the docker container with a bash prompt as: ``` > docker run -it daanx/oopsla22-namedh:1.0 bash ``` and use `vim` to edit the samples in the `samples/named-handlers` directory. You can use the `koka` command to start the interpreter, or directly run the examples as: ``` > koka -e samples/named-handlers/ask.kk ``` for example. # Docker The provide container is just a build of Koka of the `artifact-namedh` branch. One can just checkout that branch as: ``` > git clone --recursive https://github.com/koka-lang/koka -b artifact-namedh > cd koka > stack build --fast > stack exec koka ``` and run all the provided examples as described here.
See also: https://hub.docker.com/repository/docker/daanx/oopsla22-namedh
Named Effect Handlers, Koka, Algebraic Effect Handlers
Named Effect Handlers, Koka, Algebraic Effect Handlers
| selected citations These citations are derived from selected sources. This is an alternative to the "Influence" indicator, which also reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically). | 1 | |
| popularity This indicator reflects the "current" impact/attention (the "hype") of an article in the research community at large, based on the underlying citation network. | Average | |
| influence This indicator reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically). | Average | |
| impulse This indicator reflects the initial momentum of an article directly after its publication, based on the underlying citation network. | Average |
| views | 55 | |
| downloads | 1 |

Views provided by UsageCounts
Downloads provided by UsageCounts