fthomas / fthomas/refined

use Equal[_] with case object

Open
#735 9 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.