mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 00:24:34 +00:00
Support lambda sets with recursive pointers and their equivalence-checking
This commit is contained in:
parent
fa47e82d72
commit
478d4a2d44
4 changed files with 263 additions and 81 deletions
|
@ -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 {}
|
||||
"#
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue