At some point in the compilation process an expression acquires a fully-specified, possibly polymorphic, type. If we add an operation that join that type and that expresssion, say
TypedAny, then we can implement the part of #4316 requested by mitar.
In GHCi we can evaluate
HValues and also string them together with
applyDynamic :: TypedAny -> TypedAny -> Maybe TypedAny
includes in its implementation a dictionary lookup and possible dynamic object linking for class methods.
fromDynamic :: TypedAny -> Maybe a
applyDynamic, runs the typechecker at runtime to unify (and possibly link) the dynamic type (!TypedAny) and the static type (a).
*Conjecture * Since we already have
typecase (classes), with type families, this feature provides/simulates dependent types.