fthomas / fthomas/refined

Inference rules are not working for Interval types

Open
#619 0 comments 1 reaction 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.