Haskell has no subtyping as far as I know Haskell.
Functor f => (a -> b) -> f a -> f b
Defines map for any type that implements the type class functor. Lots of types will implement functor and it is easy to implement it yourself.
Nah, typeclasses are nominative typing but added post-facto (you can define a typeclass instance for a third party's type). Typeclasses are similar to Scala's traits I think (I don't know if you can add traits to a library's types though).
For instance, the Ord typeclass extends the Eq typeclass, so any instance of Ord can be used as an instance of Eq. But there is no way to cast an instance of Eq to an instance of Ord.