Comments (3)
Could you clarify what you mean by "it would only produce instances for types derived from nongeneric classes"? Providing instances for (concrete instantiations of) polymorphic types (where well defined) is pretty much the whole point of Typeable
, both here and in Haskell.
The key phrase in the above is "where well defined". It's well defined in the case of non-empty container-like things. It's clearly not well defined for function values. The reason your example has slipped through is that Typeable
provides a fallback implicit for any type with a ClassTag
available, in effect giving Java reflection an apparently parametricity respecting paintjob. That's pretty clearly wrong.
I wonder if dfltTypeable
should just go, or is there an honest halfway house here? If it does go are there any additional types for which instances should be provided which aren't currently because they're being covered by the catch all case? At a minimum I suppose we could add an instance for any type with a Generic
instance available.
Thoughts?
from shapeless.
Could you clarify what you mean by "it would only produce instances for types derived from nongeneric classes"?
class C
trait T
class GC[A]
There are instances for C
and T
for free, but GC[x]
requires more, perhaps a Generic
instance as fallback as you suggest.
from shapeless.
Gotcha ... the default case should only produce Typeable
instances for nongeneric classes.
Agreed completely. Annoyingly this can only be done with a macro, but it's the right thing to do ... do you feel like taking a crack at it?
In principle it would be possible to do something for things with a Generic
instance if Generic
were itself polymorphic (ie. you could have a polymorphic Generic
for case class Foo[T](t: T)
). That's not supported yet ... it's something I'd like to do eventually.
from shapeless.
Related Issues (20)
- implicit summoning of records.Keys for singleton subtype of HList fail sporadically 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
- MkFieldLens.mkFieldLens returns a derived type instead of type parameter
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.