@@ -4,6 +4,16 @@ import scala.quoted._
4
4
5
5
package object compiletime {
6
6
7
+ /** Use this method when you have a type, do not have a value for it but want to
8
+ * pattern match on it. For example, given a type `Tup <: Tuple`, one can
9
+ * pattern-match on it as follows:
10
+ * ```
11
+ * erasedValue[Tup] match {
12
+ * case _: EmptyTuple => ...
13
+ * case _: h *: t => ...
14
+ * }
15
+ * ```
16
+ */
7
17
erased def erasedValue [T ]: T = ???
8
18
9
19
/** The error method is used to produce user-defined compile errors during inline expansion.
@@ -38,10 +48,20 @@ package object compiletime {
38
48
transparent inline def (inline self : StringContext ) code (inline args : Any * ): String =
39
49
$ { dotty.internal.CompileTimeMacros .codeExpr(' self , ' args ) }
40
50
51
+ /** Same as `constValue` but returns a `None` if a constant value
52
+ * cannot be constructed from the provided type. Otherwise returns
53
+ * that value wrapped in `Some`.
54
+ */
41
55
inline def constValueOpt [T ]: Option [T ] = ???
42
56
57
+ /** Given a constant, singleton type `T`, convert it to a value
58
+ * of the same singleton type. For example: `assert(constValue[1] == 1)`.
59
+ */
43
60
inline def constValue [T ]: T = ???
44
61
62
+ /** Given a tuple type `(X1, ..., Xn)`, returns a tuple value
63
+ * `(constValue[X1], ..., constValue[Xn])`.
64
+ */
45
65
inline def constValueTuple [T <: Tuple ]: Tuple .Widen [T ]=
46
66
val res =
47
67
inline erasedValue[T ] match
0 commit comments