sophia/test/contracts/polymorphism_variance_switching_chain_create.aes
2022-08-03 19:59:12 +04:00

33 lines
870 B
Plaintext

contract interface I =
entrypoint f : () => int
contract C1 : I =
entrypoint f() = 123
contract C2 : I =
entrypoint f() = 888
namespace Make =
stateful function new1() : I = Chain.create() : C1
stateful function new2() : I = Chain.create() : C2
stateful function new(c : I) : int = c.f()
main contract Main =
stateful entrypoint test1() =
let c = Make.new1()
Make.new(c)
stateful entrypoint test2() =
let c = Make.new2()
Make.new(c)
stateful entrypoint test3() =
let c1 : I = Chain.create() // fails
let c2 : C1 = Chain.create() : I // fails
let c3 = Chain.create() : I // fails
let c4 = Chain.create() : C1 // succeeds
let c5 : I = Chain.create() : C1 // succeeds
let c6 : C1 = Chain.create() // succeeds
()