diff --git a/examples/acceptance_tests/023/aiken.toml b/examples/acceptance_tests/023/aiken.toml new file mode 100644 index 00000000..db8c5fd8 --- /dev/null +++ b/examples/acceptance_tests/023/aiken.toml @@ -0,0 +1,2 @@ +name = "acceptance_test_023" +version = "0.0.0" diff --git a/examples/acceptance_tests/023/lib/test.ak b/examples/acceptance_tests/023/lib/test.ak new file mode 100644 index 00000000..4c8ab00f --- /dev/null +++ b/examples/acceptance_tests/023/lib/test.ak @@ -0,0 +1,45 @@ +pub opaque type AssocList { + inner: List<#(key, value)>, +} + +pub fn new() -> AssocList { + AssocList { inner: [] } +} + +pub fn to_list(m: AssocList) -> List<#(key, value)> { + m.inner +} + +pub fn insert( + in m: AssocList, + key k: key, + value v: value, +) -> AssocList { + AssocList { inner: do_insert(m.inner, k, v) } +} + +fn do_insert( + elems: List<#(key, value)>, + k: key, + v: value, +) -> List<#(key, value)> { + when elems is { + [] -> [#(k, v)] + [#(k2, v2), ..rest] -> + if k == k2 { + [#(k, v), ..rest] + } else { + [#(k2, v2), ..do_insert(rest, k, v)] + } + } +} + +fn fixture_1() { + new() + |> insert("foo", 42) + |> insert("bar", 14) +} + +test to_list_2() { + to_list(fixture_1()) == [#("foo", 42), #("bar", 14)] +}