Я считаю, что следующее так же безопасно, как Set.mapMonotonic coerce. то есть худшее, что может случиться, это то, что я сломаю инварианты Set, если a или b имеют разные экземпляры Ord:
coerceSet :: Coercible a b=> Set.Set a -> Set.Set b
coerceSet = unsafeCoerce
Это правильно?
РЕДАКТИРОВАТЬ: проблема с соответствующей функцией для Set: https://github.com/haskell/containers/issues/308