type expressions

This commit is contained in:
Callum Renwick 2020-12-31 14:25:10 +00:00
parent b57a2e7afc
commit 018e91979a
1 changed files with 30 additions and 0 deletions

View File

@ -0,0 +1,30 @@
actor Main
new create(env: Env) =>
env.out.print("hlo wld")
// A tuple type is a sequence of types
var x: (String, U64)
x = ("hi", 3)
x = ("bye", 7)
// Pony supports tuple unpacking but calls it "destructuring"
(var y, var z) = x
// You can access the elements of tuples directly using this
// one weird syntax
y = x._1
z = x._2
// You can't assign elements of tuples. To change the value
// of a tuple you must reassign the whole thing.
x = ("wibble wobble", x._2)
// A union is a set of possible types
// This means "a is a String or None":
var a: (String | None)
a = "yeah yeah whatever static analysis tool"
// An intersection is a value that is more than one type at once
// An example from the standard library:
// type Map[K: (Hashable box & Comparable[K] box), V] is HashMap[K, V, HashEq[K]]
// K is Hashable *and* Comparable[K] at the same time