I agree that a typeclass for explicit conversions via as
would be useful. How about
trait Convertible[-A, +B] extends (A => B) with
def (x: A) as: B
I think Convertible
is a good name for this since it describes a capability: being converted by calling the as
method. I.e. analogously, if we’d want to avoid category-speak, a Functor
would be called Mappable
since it provides a map
method, instead of being called Map
directly.
EDIT: Or maybe Converter
, which emulates what we do for converting between Scala and Java collections.