Skip to content

Commit acfe480

Browse files
committed
Refactor type level example and change it to use infix operators
1 parent 02971e1 commit acfe480

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

examples/type-level.1ml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ TypeLevel: {
2828

2929
not: t -> t
3030

31-
andAlso: t -> t -> t
32-
orElse: t -> t -> t
31+
(&&&): t -> t -> t
32+
(|||): t -> t -> t
3333

3434
equals: t -> t -> t
3535
}
@@ -43,7 +43,7 @@ TypeLevel: {
4343
isL: t -> Bool.t
4444
isR: t -> Bool.t
4545

46-
case: t -> t
46+
case: (type _ _) -> (type _ _) -> t -> type
4747
}
4848

4949
Nat: {
@@ -55,6 +55,7 @@ TypeLevel: {
5555
one: t
5656

5757
succ: t -> t
58+
5859
(+): t -> t -> t
5960
(*): t -> t -> t
6061
}
@@ -80,10 +81,9 @@ TypeLevel: {
8081

8182
type of fst snd: t = fun (type d _ _) => d fst snd
8283

83-
type cross (type f _) (type s _) (p: t): t = fun (type d _ _) =>
84-
of (f (fst p)) (s (snd p)) d
84+
type cross (type f _) (type s _) (p: t): t = of (f (fst p)) (s (snd p))
8585

86-
type map (type f _) (p: t): t = fun (type d _ _) => cross f f p d
86+
type map (type f _) (p: t): t = cross f f p
8787
}
8888

8989
Bool = {
@@ -94,8 +94,8 @@ TypeLevel: {
9494

9595
type not (x: t): t = fun true false => x false true
9696

97-
type andAlso (l: t) (r: t): t = fun false true => l (r true false) false
98-
type orElse (l: t) (r: t): t = fun false true => l true (r true false)
97+
type (l: t) &&& (r: t): t = fun false true => l (r true false) false
98+
type (l: t) ||| (r: t): t = fun false true => l true (r true false)
9999

100100
type equals (l: t) (r: t): t =
101101
fun true false => l (r true false) (r false true)
@@ -112,7 +112,7 @@ TypeLevel: {
112112
type isR (a: t): Bool.t =
113113
fun true false => a (fun _ => false) (fun _ => true)
114114

115-
type case (a: t) (type inL _) (type inR _) = a inL inR
115+
type case (type inL _) (type inR _) (a: t): type = a inL inR
116116
}
117117

118118
Nat = {
@@ -121,11 +121,12 @@ TypeLevel: {
121121
type isZero (n: t): Bool.t = fun true false => n (fun _ => false) true
122122

123123
type zero: t = fun (type _ _) zero => zero
124-
type one: t = fun (type succ _) zero => succ zero
124+
type one: t = fun (type succ _) => succ
125125

126-
type succ (n: t): t = fun (type succ _) zero => succ (n succ zero)
127126
type (m: t) + (n: t): t = fun (type succ _) zero => n succ (m succ zero)
128-
type (m: t) * (n: t): t = fun (type succ _) zero => n (m succ) zero
127+
type (m: t) * (n: t): t = fun (type succ _) => n (m succ)
128+
129+
type succ = (+) one
129130
}
130131

131132
List = {

0 commit comments

Comments
 (0)