File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Original file line number Diff line number Diff line change
1
+
2
+ trait Ordering {
3
+ type T
4
+ def compare (t1: T , t2 : T ): Int
5
+ }
6
+
7
+ class SetFunctor (tracked val ord : Ordering ) {
8
+ type Set = List [ord.T ]
9
+ def empty : Set = Nil
10
+
11
+ implicit class helper (s : Set ) {
12
+ def add (x : ord.T ): Set = x :: remove(x)
13
+ def remove (x : ord.T ): Set = s.filter(e => ord.compare(x, e) != 0 )
14
+ def member (x : ord.T ): Boolean = s.exists(e => ord.compare(x, e) == 0 )
15
+ }
16
+ }
17
+
18
+ object Test {
19
+ val orderInt = new Ordering {
20
+ type T = Int
21
+ def compare (t1 : T , t2 : T ): Int = t1 - t2
22
+ }
23
+
24
+ val IntSet = new SetFunctor (orderInt)
25
+ import IntSet ._
26
+
27
+ def main (args : Array [String ]) = {
28
+ val set = IntSet .empty.add(6 ).add(8 ).add(23 )
29
+ assert(! set.member(7 ))
30
+ assert(set.member(8 ))
31
+ }
32
+ }
You can’t perform that action at this time.
0 commit comments