Skip to content

Commit 97dea61

Browse files
committed
unreachable case
1 parent 629e36f commit 97dea61

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

scala/RDF.scala

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import scala.util.Try
2+
import scala.reflect.TypeTest
3+
24

35
trait RDF:
46
rdf =>
57

68
type R = rdf.type
79
type Node <: Matchable
810
type URI <: Node
11+
type BNode <: Node
912

1013
given rops: ROps[R]
1114
end RDF
@@ -17,24 +20,31 @@ object RDF:
1720
type URI[R <: RDF] <: Node[R] = R match
1821
case GetURI[u] => u & Node[R]
1922

23+
type BNode[R <: RDF] <: Node[R] = R match
24+
case GetBNode[b] => b & Node[R]
25+
26+
type Subject[R <: RDF] = URI[R] | BNode[R]
27+
2028
private type GetNode[N] = RDF { type Node = N }
2129
private type GetURI[U] = RDF { type URI = U }
30+
private type GetBNode[B] = RDF { type BNode = B }
2231
end RDF
2332

2433
trait ROps[R <: RDF]:
2534
def mkUri(str: String): Try[RDF.URI[R]]
2635
def auth(uri: RDF.URI[R]): Try[String]
36+
given subjToURITT: TypeTest[RDF.Subject[R], RDF.URI[R]]
2737

2838
object TraitTypes:
2939
trait Node:
3040
def value: String
3141

3242
trait Uri extends Node
33-
43+
trait BNode extends Node
44+
3445
def mkUri(u: String): Uri =
3546
new Uri { def value = u }
3647

37-
3848
object TraitRDF extends RDF:
3949
import TraitTypes as tz
4050

@@ -46,6 +56,12 @@ object TraitRDF extends RDF:
4656
override def auth(uri: RDF.URI[R]): Try[String] =
4757
Try(java.net.URI.create(uri.value).getAuthority())
4858

59+
given subjToURITT: TypeTest[RDF.Subject[R], RDF.URI[R]] with
60+
override def unapply(s: RDF.Subject[R]): Option[s.type & URI] =
61+
s match
62+
case x: (s.type & RDF.URI[R]) => Some(x)
63+
case _ => None
64+
4965
end TraitRDF
5066

5167
class Test[R <: RDF](using rops: ROps[R]):

0 commit comments

Comments
 (0)