Strictly map the second argument argument covariantly with a function
that is assumed operationally to be a cast, such as a newtype
constructor.
Note: This operation is explicitly
unsafe since an
implementation may choose to use
unsafeCoerce to implement
this combinator and it has no way to validate that your function meets
the requirements.
If you implement this combinator with
unsafeCoerce, then you
are taking upon yourself the obligation that you don't use GADT-like
tricks to distinguish values.
If you import
Data.Profunctor.Unsafe you are taking upon
yourself the obligation that you will only call this with a first
argument that is operationally identity.
The semantics of this function with respect to bottoms should match
the default definition:
(#.) ≡ \_ -> \p -> p `seq` rmap coerce p