Comments (3)
The last two lines are not syntactically equivalent. The inferred type is
inferKeys[FieldType["a", Int] :: FieldType["b", Int] :: HNil](record2)
It doesn't work with the singleton type (which is a subtype) because Keys
is invariant.
You could use Keys[_ >: T]
instead.
from shapeless.
@joroKr21 so type parameter cannot be inferred as singleton type even if the variable is declared so? Wow
The irony is that this correctly demonstrates the invariance you described:
type RR = record.type
val record2: RR = ...
Really? The compiler is really mangled.
Regardless, my impression so far is that: it should be a valid improvement to make Keys contravariant to the input type, what do you think?
from shapeless.
If we apply variance it should be consistently to all type classes. But Scala 2 implicit resolution has quirks when it comes to variance, esp. contravariance. That would also be too big of a can of worms to open in Shapeless 2 I'm afraid. And since it has an easy workaround (use Keys[_ >: T]
if you need contravariance) I think it's not worth the effort.
from shapeless.
Related Issues (20)
- Could not find Generic instance if object has explicit "unapply" method since Scala 2.13.4 HOT 3
- Witness path-dependent type `T` lose refinement HOT 3
- Witness singleton type automatically erased by compile-time type inference HOT 3
- migrate to GitHub Actions HOT 1
- Implicit is not returned from the cache but rather from current scope HOT 3
- Tagged types based on anything other than AnyVals produces exception in Spark HOT 12
- Migrate to GitHub actions HOT 1
- `Default.AsRecord` causes `StackOverflow` in a path-dependent type's companion object HOT 5
- `ops.coproduct.Reify` broken HOT 1
- performance issue with combined `Length` and `ToSizedHList` implicit derivation HOT 3
- Generic in shapeless 2.3.5+ not working for classes with context bounds if some implicit value is present HOT 2
- Generic.Aux compiles but errors with ClassCastException at runtime HOT 3
- Shapeless 2.3.5+ can't provide implicit for Generic.Aux HOT 5
- _0 as defined is somehow causing extreme compile times HOT 1
- Possible derivation regression since shapeless 2.3.8 HOT 3
- Strange behavior when using -release 8 scalac option HOT 3
- Fix annotations with type parameter
- Shouldn't `KeyTag` be an abstract type rather than a trait? HOT 4
- `Generic` is not materialized in macro-generated companion object of nested case class HOT 1
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 shapeless.