Using abilities as types is illegal, but we can still compile them

Closes #2881
This commit is contained in:
Ayaz Hafiz 2022-04-19 16:41:18 -04:00
parent c0dec1d5bc
commit 80dc50763e
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
7 changed files with 151 additions and 4 deletions

View file

@ -188,3 +188,31 @@ fn ability_constrained_in_non_member_multiple_specializations_inferred() {
u64
)
}
#[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))]
fn ability_used_as_type_still_compiles() {
assert_evals_to!(
indoc!(
r#"
app "test" provides [ result ] to "./platform"
Hash has
hash : a -> U64 | a has Hash
mulHashes : Hash, Hash -> U64
mulHashes = \x, y -> hash x * hash y
Id := U64
hash = \$Id n -> n
Three := {}
hash = \$Three _ -> 3
result = mulHashes ($Id 100) ($Three {})
"#
),
300,
u64
)
}