Skip to content

Instantly share code, notes, and snippets.

@schicks
Created January 2, 2021 18:55
Show Gist options
  • Save schicks/5542f949e7af63ca66e5c167e8d1e294 to your computer and use it in GitHub Desktop.
Save schicks/5542f949e7af63ca66e5c167e8d1e294 to your computer and use it in GitHub Desktop.
Koka for loops
effect leq<a> {
fun leq(first: a, second: a) : bool
}
fun for(
from: a,
incr: a -> <div,leq<a>|e> a,
to: a,
do: () -> <div,leq<a>|e> ()
) : <div,leq<a>|e> () {
if (from.leq(to)) then {
do();
for(from.incr, incr, to, do)
} else ()
}
fun using-for () {
var something := 0
with fun leq(first: int, second: int) {first <= something}
for(0, fn (a) {a+1}, 10) {
something := something + 1
}
var something-else := "a"
with fun leq(first: string, second: string) {first <= second}
for("", fn (a) {a+"a"}, "aaaaaaa") {
something-else := something-else + "a"
}
(something, something-else)
}
@schicks
Copy link
Author

schicks commented Jan 18, 2024

But don't you need a generic function parameter for each "type class" you're handling? Or is there a way that your one generic function argument can be row typed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment