-
Notifications
You must be signed in to change notification settings - Fork 153
Closed
Description
I have some problem when playing with refines using boolean predicates.
object test {
import eu.timepit.refined.auto._
type LongOrDouble = NonEmpty And (ValidLong Or ValidDouble)
val SomeLong: String Refined (NonEmpty And ValidLong) = "11"
val SomeLongOrDouble: String Refined LongOrDouble = SomeLong
}which fails with
[error] type mismatch;
[error] found : eu.timepit.refined.api.Refined[String,eu.timepit.refined.boolean.And[eu.timepit.refined.collection.NonEmpty,eu.timepit.refined.string.ValidLong]]
[error] (which expands to) eu.timepit.refined.api.Refined[String,eu.timepit.refined.boolean.And[eu.timepit.refined.boolean.Not[eu.timepit.refined.collection.Empty],eu.timepit.refined.string.ValidLong]]
[error] required: eu.timepit.refined.api.Refined[String,test.LongOrDouble]
[error] (which expands to) eu.timepit.refined.api.Refined[String,eu.timepit.refined.boolean.And[eu.timepit.refined.boolean.Not[eu.timepit.refined.collection.Empty],eu.timepit.refined.boolean.Or[eu.timepit.refined.string.ValidLong,eu.timepit.refined.string.ValidDouble]]]
[error] val SomeLongOrDouble: String Refined LongOrDouble = SomeLong
[error] ^
object test2 {
import eu.timepit.refined.auto._
type LongOrDouble = (NonEmpty And ValidLong) Or (NonEmpty And ValidDouble)
val SomeLongOrDouble: String Refined LongOrDouble = "11"
val SomeNonEmpty: String Refined NonEmpty = SomeLongOrDouble
}
which fails with
[error] type mismatch;
[error] found : eu.timepit.refined.api.Refined[String,test2.LongOrDouble]
[error] (which expands to) eu.timepit.refined.api.Refined[String,eu.timepit.refined.boolean.Or[eu.timepit.refined.boolean.And[eu.timepit.refined.boolean.Not[eu.timepit.refined.collection.Empty],eu.timepit.refined.string.ValidLong],eu.timepit.refined.boolean.And[eu.timepit.refined.boolean.Not[eu.timepit.refined.collection.Empty],eu.timepit.refined.string.ValidDouble]]]
[error] required: eu.timepit.refined.api.Refined[String,eu.timepit.refined.collection.NonEmpty]
[error] (which expands to) eu.timepit.refined.api.Refined[String,eu.timepit.refined.boolean.Not[eu.timepit.refined.collection.Empty]]
[error] val SomeNonEmpty: String Refined NonEmpty = SomeLongOrDouble
[error]
I'm not sure if this is limitation of scala as a language or is there some possibility for that to work?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels