From 8456f37d37e4015fc1408612a818283d645bd8c8 Mon Sep 17 00:00:00 2001 From: Georgi Krastev Date: Fri, 11 Feb 2022 09:40:13 +0100 Subject: [PATCH] Remove refinement from Witness.value --- .../jvm/src/test/scala/shapeless/witness.scala | 18 ++++++++++++++++++ core/src/main/scala/shapeless/singletons.scala | 2 +- core/src/test/scala/shapeless/singletons.scala | 9 +++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 core/jvm/src/test/scala/shapeless/witness.scala diff --git a/core/jvm/src/test/scala/shapeless/witness.scala b/core/jvm/src/test/scala/shapeless/witness.scala new file mode 100644 index 000000000..e14e298f6 --- /dev/null +++ b/core/jvm/src/test/scala/shapeless/witness.scala @@ -0,0 +1,18 @@ +package shapeless + +import org.junit.Assert._ +import org.junit.Test + +import scala.reflect.runtime.universe.WeakTypeTag + +class WitnessJvmTests { + + @Test + def testRuntimeReflection: Unit = { + val w1: Witness.Lt[Int] = Witness(1) + val v1 = w1.value + def infer[T](v: T)(implicit ev: WeakTypeTag[T]): WeakTypeTag[T] = ev + val tag = infer(v1) + assertEquals(tag.tpe.toString, "w1.T") + } +} diff --git a/core/src/main/scala/shapeless/singletons.scala b/core/src/main/scala/shapeless/singletons.scala index 9532d8ed5..5b4fa8e92 100644 --- a/core/src/main/scala/shapeless/singletons.scala +++ b/core/src/main/scala/shapeless/singletons.scala @@ -31,7 +31,7 @@ import scala.util.Try */ trait Witness extends Serializable { type T - val value: T {} + val value: T } object Witness extends Dynamic { diff --git a/core/src/test/scala/shapeless/singletons.scala b/core/src/test/scala/shapeless/singletons.scala index ca2250aae..1c0069b8f 100644 --- a/core/src/test/scala/shapeless/singletons.scala +++ b/core/src/test/scala/shapeless/singletons.scala @@ -589,6 +589,15 @@ class SingletonTypesTests { assertTypedEquals[ObjectThis.type](ObjectThis.w1.value, ObjectThis.w2.value) } + @Test + def testTypeInference: Unit = { + val singletonW = Witness(3) + def s3[T](v: T)(implicit ev: Witness.Aux[T]) = v + val v = singletonW.value + val s = s3(v) + assertEquals(s, v) + } + class NestingBug { val o: AnyRef = new Object {}