Conversation

If I understood what these words mean correctly, "reified generics" means that types "exist" at runtime, unlike in Haskell where they're erased. (But similarly to how Haskell does dictionary passing for type classes, most relevantly for Typeable.)
1
3
Oh. I was suggesting relevant types in the implementation without introspection in the language, but yes, you could also have the reverse, as D does. (I think compile-time introspection is nearly as bad as runtime if its usage isn't tracked in APIs, which may be the disconnect.)
2
2
Yeah, the issue with D is that you can't tell whether something is accessing type information statically or not - ie. you can't track the 'relevance' of type parameters. Tbf, I believe Rust is in the same boat thanks to specialization...
1
1
Yup, I’ve seen this one before, it’s good. The issue with D’s introspection though is that you get template explosions similar to C++. Adding static guards on templates can help, but they are easy to forget to add.
3
1
The benefit to parametericity is that you can rely on parameters ‘hiding’ information, and constraining the implementation. I’d like to have both introspectable and parametric parameters in my programming language.
2
3
Agreed, I'm just pushing back on the general tenor of this thread that *any* reflection is a design smell.
2
2