Support lambda sets with recursive pointers and their equivalence-checking

This commit is contained in:
Ayaz Hafiz 2023-01-25 17:57:49 -06:00
parent fa47e82d72
commit 478d4a2d44
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
4 changed files with 263 additions and 81 deletions

View file

@ -2496,3 +2496,44 @@ fn weakening_avoids_overspecialization() {
"###
)
}
#[mono_test]
fn recursively_build_effect() {
indoc!(
r#"
app "test" provides [main] to "./platform"
greeting =
hi = "Hello"
name = "World"
"\(hi), \(name)!"
main =
when nestHelp 4 is
_ -> greeting
nestHelp : I64 -> XEffect {}
nestHelp = \m ->
when m is
0 ->
always {}
_ ->
always {} |> after \_ -> nestHelp (m - 1)
XEffect a := {} -> a
always : a -> XEffect a
always = \x -> @XEffect (\{} -> x)
after : XEffect a, (a -> XEffect b) -> XEffect b
after = \(@XEffect e), toB ->
@XEffect \{} ->
when toB (e {}) is
@XEffect e2 ->
e2 {}
"#
)
}