cleaning up examples
This commit is contained in:
parent
333534a8d1
commit
9db2cb800d
10 changed files with 45 additions and 80 deletions
16
example/comparable.msph
Normal file
16
example/comparable.msph
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
nominal lt
|
||||||
|
nominal eq
|
||||||
|
nominal gt
|
||||||
|
|
||||||
|
type ord = lt | eq | gt
|
||||||
|
|
||||||
|
type comparable[t] = {
|
||||||
|
member cmp : t -> ord
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type integer = {
|
||||||
|
member cmp : integer -> ord
|
||||||
|
}
|
||||||
|
|
||||||
|
assert integer <: comparable[integer]
|
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
nominal C
|
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
type A = & C D
|
|
|
@ -1,13 +0,0 @@
|
||||||
|
|
||||||
type X = & C (| D E)
|
|
||||||
|
|
||||||
type Y = {
|
|
||||||
member x : X
|
|
||||||
type Z = & X {
|
|
||||||
type T = C
|
|
||||||
assert C <: D
|
|
||||||
}
|
|
||||||
member r : (box forall S. (=> S Y))
|
|
||||||
member s : C[X, Y, z]
|
|
||||||
member f : -> A B
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
nominal M
|
|
||||||
nominal N
|
|
||||||
nominal O
|
|
||||||
nominal P
|
|
||||||
|
|
||||||
type A = {
|
|
||||||
member member1: & N M
|
|
||||||
member member2: | M N
|
|
||||||
}
|
|
||||||
|
|
||||||
type B = forall X. {
|
|
||||||
member member1 : & X A
|
|
||||||
}
|
|
||||||
|
|
||||||
member outer1 : box {
|
|
||||||
member member1: & B True
|
|
||||||
type T = & B A
|
|
||||||
member member2 : | (& T O) P
|
|
||||||
type S = & B False
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
nominal N
|
|
||||||
nominal M
|
|
||||||
|
|
||||||
|
|
||||||
type T[X, Y] = {
|
|
||||||
// body
|
|
||||||
}
|
|
||||||
|
|
||||||
type A = T[N, M] // binding X -> N, Y -> M
|
|
||||||
type B = T[M, N] // binding X -> M, Y -> N
|
|
||||||
|
|
||||||
// converted to
|
|
||||||
|
|
||||||
type A = ⟨ X -> N, Y -> M ⟩ {
|
|
||||||
// body
|
|
||||||
}
|
|
||||||
type B = ⟨ X -> M, Y -> N ⟩ {
|
|
||||||
// body
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
10
example/graph.msph
Normal file
10
example/graph.msph
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
type gnode[e] = {
|
||||||
|
member edges : iterable[e]
|
||||||
|
}
|
||||||
|
|
||||||
|
type gedge[n] = {
|
||||||
|
member src : n
|
||||||
|
member dst : n
|
||||||
|
}
|
||||||
|
|
||||||
|
type graph[n, e] = (n <: gnode[e]) & (e <: gedge[n])
|
|
@ -1,21 +0,0 @@
|
||||||
type A[X, Y] = {
|
|
||||||
type B[Z] = {
|
|
||||||
mb : X & Z
|
|
||||||
}
|
|
||||||
|
|
||||||
ma : B[Y]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
m : A[M, N]
|
|
||||||
|
|
||||||
|
|
||||||
m : ⟨X -> M, Y -> N⟩ {
|
|
||||||
ma : B[Y]
|
|
||||||
}
|
|
||||||
|
|
||||||
m : ⟨X -> M, Y -> N⟩ {
|
|
||||||
ma : ⟨Z -> Y⟩ {
|
|
||||||
mb : X & Z
|
|
||||||
}
|
|
||||||
}
|
|
19
example/self.msph
Normal file
19
example/self.msph
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
type Accumulator[Self] = (Self <: Accumulator[Self]) & {
|
||||||
|
member add : Int -> Self
|
||||||
|
}
|
||||||
|
|
||||||
|
type MyAccum = {
|
||||||
|
member add : Int -> MyAccum
|
||||||
|
}
|
||||||
|
|
||||||
|
assert MyAccum <: Accumulator[MyAccum]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
type Acchmmmmulator[Self] = (Self <: Acchmmmmulator[Self]) => {
|
||||||
|
member add : Int -> Self
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue