File tree Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Elem
2
+ trait QueueSignature :
3
+ type Queue
4
+ def empty : Queue
5
+ def append (q : Queue , e : Elem ): Queue
6
+ def pop (q : Queue ): Option [(Elem , Queue )]
7
+ val QueueModule : QueueSignature =
8
+ object QueueImpl extends QueueSignature :
9
+ type Queue = (List [Elem ], List [Elem ])
10
+ def empty = (Nil , Nil )
11
+ def append (q : Queue , e : Elem ): Queue = (q._1, e :: q._2)
12
+ def pop (q : Queue ): Option [(Elem , Queue )] = q match
13
+ case (Nil , Nil ) => None
14
+ case (x :: xs, ys) => Some ((x, (xs, ys)))
15
+ case (Nil , ys) => pop((ys.reverse, Nil ))
16
+ QueueImpl
17
+
18
+ object queues :
19
+ opaque type Queue = (List [Elem ], List [Elem ])
20
+ def empty = (Nil , Nil )
21
+ def append (q : Queue , e : Elem ): Queue = (q._1, e :: q._2)
22
+ def pop (q : Queue ): Option [(Elem , Queue )] = q match
23
+ case (Nil , Nil ) => None
24
+ case (x :: xs, ys) => Some ((x, (xs, ys)))
25
+ case (Nil , ys) => pop((ys.reverse, Nil ))
You can’t perform that action at this time.
0 commit comments