Comments (8)
I suspect that calculating MinValue
and MaxValue
of Crazy
is the culprit.
from refined.
That was quick!
I should have mentioned in the comment, Equal[5] Or Greater[5]
is fine.
from refined.
It seems @fthomas suspicions are correct. This does it:
object Main extends App {
type Crazy = Int Refined (Greater[5] Or Equal[5])
val min: Min[Crazy] = implicitly[Min[Crazy]]
}
from refined.
Oh Or
is going to use Min.validateMin
which will start at Int.MinValue
and step up one at a time until it finds a valid value. No wonder.
Would something like this work?
implicit def orMin[F[_, _], T, L, R](implicit
rt: RefType[F],
ml: Min[F[T, L]],
mr: Min[F[T, R]],
at: Adjacent[T],
v: Validate[T, L Or R]
): Min[F[T, L Or R]] =
Min.instance(rt.unsafeWrap(findValid(at.min(rt.unwrap(ml.min), rt.unwrap(mr.min)))))
from refined.
Would something like this work?
Yes, I think so. But since this is Or
, the findValid
call should not be needed.
from refined.
Oh good point. I realised that still isn't going to cut it. There isn't one for Equal
.
This seems to fix it:
implicit def orMin[F[_, _], T, L, R](implicit
rt: RefType[F],
ml: Min[F[T, L]],
mr: Min[F[T, R]],
at: Adjacent[T],
v: Validate[T, L Or R]
): Min[F[T, L Or R]] =
Min.instance(rt.unsafeWrap(at.min(rt.unwrap(ml.min), rt.unwrap(mr.min))))
implicit def equalMin[F[_, _], T, N](implicit
rt: RefType[F],
wn: WitnessAs[N, T]
): Min[F[T, Equal[N]]] =
Min.instance(rt.unsafeWrap(wn.snd))
from refined.
It probably makes sense to add these two instances for Min
and Max
.
On a side note: The built-in GreaterEqual[N]
should be preferred over Greater[N] Or Equal[N]
.
from refined.
On a side note: The built-in
GreaterEqual[N]
should be preferred overGreater[N] Or Equal[N]
.
Agreed. I found this example/problem in a different library and I'm putting in a PR to do just that. 😄
from refined.
Related Issues (20)
- type mismatch with function argument HOT 1
- Inconsistency between 0.9.25 and 0.9.26 versions - possible regression HOT 4
- refined-cats is not published for Scala 3.x HOT 3
- Broken link in README
- Versioning scheme is not declared
- OpenAPI with Refined Strings HOT 4
- Chaining refined string operation HOT 1
- Publish for Scala native? HOT 1
- Pureconfig not published for scala3 HOT 1
- Scala 3.2: Comparing NonNegInt with Int gives a compile error HOT 1
- Creating a Map of Literal Refined Types as the Key doesn't work HOT 1
- Size predicate validator error HOT 7
- refined-scalacheck all values discarded HOT 5
- Int Refined Positive does work with Scala 3.2.0 HOT 1
- Add support for `NonBlankString` and `StrippedString`
- Replace HList useages with Tuple in scala3 implmentations HOT 2
- Runtime `java.lang.AbstractMethodError` when combining refinement erasure, value class erasure, and generic type erasure HOT 3
- Define versionScheme
- Provide `Ordering` if the base type has one
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from refined.