File tree Expand file tree Collapse file tree 5 files changed +62
-0
lines changed Expand file tree Collapse file tree 5 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ package pack
2+ import Maybe ._
3+ opaque type Maybe [+ A ] >: (Absent | Present [A ]) = Absent | Present [A ]
4+ object Maybe :
5+ sealed abstract class Absent
6+ case object Absent extends Absent
7+ object internal :
8+ case class PresentAbsent (val depth : Int )
9+ opaque type Present [+ A ] = A | internal.PresentAbsent
10+
11+ extension [A ](self : Maybe [A ]) {
12+ inline def flatten [B ]: Maybe [B ] = ???
13+ inline def isDefined : Boolean = ???
14+ }
Original file line number Diff line number Diff line change 1+ import scala .quoted ._
2+
3+ inline def passThorugh (inline condition : Boolean ): Any =
4+ $ { passThorughImpl(' {condition}) }
5+
6+ def passThorughImpl (condition : Expr [Boolean ])(using Quotes ): Expr [Any ] = condition
Original file line number Diff line number Diff line change 1+ object Test {
2+ def main (): Unit =
3+ import pack .Maybe
4+ val res : Maybe [Maybe [Int ]] = ???
5+ passThorugh(res.flatten.isDefined)
6+ }
Original file line number Diff line number Diff line change 1+ object outer :
2+ opaque type Queue = Queue .Unsafe
3+ object Queue :
4+ abstract class Unsafe
5+ opaque type Unbounded = Queue
6+ object Unbounded :
7+ inline def initWith ()(f : Unbounded => Unit ): Unit =
8+ f(Unsafe .init())
9+
10+ opaque type Unsafe <: Queue .Unsafe = Queue
11+ object Unsafe :
12+ def init [A ](): Unsafe = ???
13+
14+ object Resource :
15+ def run : Unit =
16+ outer.Queue .Unbounded .initWith() { q =>
17+ ???
18+ }
Original file line number Diff line number Diff line change 1+ object other :
2+ sealed abstract class Absent
3+ case object Absent extends Absent
4+ case class PresentAbsent (val depth : Int )
5+ opaque type Present [+ A ] = A | PresentAbsent
6+ opaque type Maybe [+ A ] >: (Absent | Present [A ]) = Absent | Present [A ]
7+
8+ extension [A ](self : Maybe [A ]) {
9+ inline def flatten [B ]: Maybe [B ] = if self.isEmpty then Absent else ???
10+ def isEmpty : Boolean = self.isInstanceOf [Absent ]
11+ }
12+
13+ class Test {
14+ def main (): Unit =
15+ import other .Maybe
16+ val res : Maybe [Maybe [Int ]] = ???
17+ res.flatten
18+ }
You can’t perform that action at this time.
0 commit comments