Strictly map the first argument argument contravariantly 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 second
argument that is operationally identity.
(.#) ≡ \p -> p `seq` \f -> lmap coerce p