特定のプラットフォームで Haskell 型に同等の強制可能インスタンスがあるかどうかを判断するにはどうすればよいですか?
Coercible
GHC 7.8について聞いたところですが、これは素晴らしいようです。その文脈では、私の特定の問題を解決するための同様に良い質問は次のとおりだと思います:どのペアの型について GHC に問い合わせる方法はありa
ますb
かCoercible a b
? (現在のプラットフォームでは、たとえば)
コンパイラやプラットフォームにとらわれないプログラムで forを有効にするには、特定のプラットフォームに特定のインスタンスが存在するcoerce :: Coercible a b => a -> b
かどうかを、できればコンパイル時だけで、場合によってはコードを書くときにも明示的に知る必要があるように思えます。Coercible a b
それ以外の場合は、より遅い非ヌープフォールバックを使用します(CPPを使用すると思います)。
フォローアップの質問: GHC が関数を提供することは理にかなっていますか?
coerceOrConvert :: (a -> b) -> a -> b
であるプロパティcoerceOrConvert f
で
coerce
Coercible a b
現在の GHC バージョンとプラットフォームのインスタンスがある場合f
そうでない場合
これは通常の型クラスにはあまり意味がないことはわかっていますが、Coercible
通常とはかけ離れているように見えるので、私にはわかりません…</p>