use Equal[_] with case object
- Dominant language
- Scala
- Stars
- 1.7k
- Forks
- 152
- Avg merge
- 1h 20m
- Merged PRs (30d)
- 6
Description
I want to achieve:
```scala
sealed trait Status extends Product with Serializable
object Status {
case object A extends Status
case object B extends Status
case object C extends Status
}
import shapeless.::
import shapeless.HNil
import eu.timepit.refined.api.Refined
import eu.timepit.refined.boolean.OneOf
import eu.timepit.refined.generic.Equal
import eu.timepit.refined.auto._
type ValidStatus = OneOf[Equal[Status.A.type] :: Equal[Status.B.type] :: HNil]
val validStatus: Status Refined ValidStatus = Status.A
```
and i get
```
:22: error: compile-time refinement only works with literals
val validStatus: Status Refined ValidStatus = Status.A
```
when i changed to
```scala
import eu.timepit.refined.auto.refineMV
val validStatus: Status Refined ValidStatus = refineMV[ValidStatus](Status.A)
```
i got
```
:20: error: implicit error;
!I v: Validate[A.type, OneOf[Equal[A.type] :: Equal[B.type] :: HNil]]
OneOf.oneOfHConsValidate invalid because
!I vt: Validate.Aux[A.type, OneOf[Equal[B.type] :: HNil], OneOf[RT]]
――OneOf.oneOfHConsValidate invalid because
!I vh: Validate.Aux[A.type, Equal[B.type], RH]
――――Equal.equalValidate invalid because
!I wu: WitnessAs[B.type, A.type]
――――――WitnessAs.natWitnessAs invalid because
!I ta: ToInt[B.type]
val validStatus: Status Refined ValidStatus = refineMV[ValidStatus](Status.A)
```
`refineV` also not working
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.