Powered by OpenAIRE graph
Found an issue? Give us feedback
image/svg+xml art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos Open Access logo, converted into svg, designed by PLoS. This version with transparent background. http://commons.wikimedia.org/wiki/File:Open_Access_logo_PLoS_white.svg art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos http://www.plos.org/ ZENODOarrow_drop_down
image/svg+xml art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos Open Access logo, converted into svg, designed by PLoS. This version with transparent background. http://commons.wikimedia.org/wiki/File:Open_Access_logo_PLoS_white.svg art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos http://www.plos.org/
ZENODO
Software . 2022
License: CC BY
Data sources: Datacite
image/svg+xml art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos Open Access logo, converted into svg, designed by PLoS. This version with transparent background. http://commons.wikimedia.org/wiki/File:Open_Access_logo_PLoS_white.svg art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos http://www.plos.org/
ZENODO
Software . 2022
License: CC BY
Data sources: ZENODO
image/svg+xml art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos Open Access logo, converted into svg, designed by PLoS. This version with transparent background. http://commons.wikimedia.org/wiki/File:Open_Access_logo_PLoS_white.svg art designer at PLoS, modified by Wikipedia users Nina, Beao, JakobVoss, and AnonMoos http://www.plos.org/
ZENODO
Software . 2022
License: CC BY
Data sources: Datacite
versions View all 2 versions
addClaim

OOPSLA'22 Paper Artifact: First Class Names for Effect Handlers

Authors: Xie, Ningning; Cong, Youyou; Ikemori, Kazuki; Leijen, Daan;

OOPSLA'22 Paper Artifact: First Class Names for Effect Handlers

Abstract

# 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

Keywords

Named Effect Handlers, Koka, Algebraic Effect Handlers

  • BIP!
    Impact byBIP!
    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
    OpenAIRE UsageCounts
    Usage byUsageCounts
    visibility views 55
    download downloads 1
  • 55
    views
    1
    downloads
    Powered byOpenAIRE UsageCounts
Powered by OpenAIRE graph
Found an issue? Give us feedback
visibility
download
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).
BIP!Citations provided by BIP!
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.
BIP!Popularity provided by BIP!
influence
This indicator reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically).
BIP!Influence provided by BIP!
impulse
This indicator reflects the initial momentum of an article directly after its publication, based on the underlying citation network.
BIP!Impulse provided by BIP!
views
OpenAIRE UsageCountsViews provided by UsageCounts
downloads
OpenAIRE UsageCountsDownloads provided by UsageCounts
1
Average
Average
Average
55
1