Skip to content

Commit 3ea82b0

Browse files
committed
Unrelated test for opaque types
1 parent 2215ff8 commit 3ea82b0

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

tests/pos/opaques-queue.scala

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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))

0 commit comments

Comments
 (0)