Inference rules are not working for Interval types
- Dominant language
- Scala
- Stars
- 1.7k
- Forks
- 152
- Avg merge
- 1h 20m
- Merged PRs (30d)
- 6
Description
While getting familiar with `refined` (version `0.9.4`) I was excited by ability to easily convert between refined types:
```scala
scala> val a: Int Refined Greater[W.`5`.T] = 10
a: Int Refined Greater[Int(5)] = 10
scala> val b: Int Refined Greater[W.`4`.T] = a
b: Int Refined Greater[Int(4)] = 10
```
but once I tried slightly more complex type, I faced compiler error:
```scala
scala> val i: Int Refined Interval.Closed[W.`5`.T, W.`15`.T] = 10
i: eu.timepit.refined.api.Refined[Int,eu.timepit.refined.numeric.Interval.Closed[Int(5),Int(15)]] = 10
// I expected this to work as [5, 15] is inside `[0, 20], but ...
scala> val j: Int Refined Interval.Closed[W.`0`.T, W.`20`.T] = i
:22: error: type mismatch;
found : eu.timepit.refined.api.Refined[Int,eu.timepit.refined.numeric.Interval.Closed[Int(5),Int(15)]]
(which expands to) eu.timepit.refined.api.Refined[Int,eu.timepit.refined.boolean.And[eu.timepit.refined.boolean.Not[eu.timepit.refined.numeric.Less[Int(5)]],eu.timepit.refined.boolean.Not[eu.timepit.refined.numeric.Greater[Int(15)]]]]
required: eu.timepit.refined.api.Refined[Int,eu.timepit.refined.numeric.Interval.Closed[Int(0),Int(20)]]
(which expands to) eu.timepit.refined.api.Refined[Int,eu.timepit.refined.boolean.And[eu.timepit.refined.boolean.Not[eu.timepit.refined.numeric.Less[Int(0)]],eu.timepit.refined.boolean.Not[eu.timepit.refined.numeric.Greater[Int(20)]]]]
val j: Int Refined Interval.Closed[W.`0`.T, W.`20`.T] = i
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.