>>16
リンク先では、hsc2hs で作った Enum 型を
次のように使って C 言語側の関数に渡しています(途中省略しました)

status <- c_qag gsl_f
  (realToFrac a)
  ・・・
  (rule gauss)
  ・・・
  errorPtr

この c_qag gsl_f 関数は名前や使われ方から見て
きっとどこかで foreign import されていると思いますが、
リンク先のページにはその定義は書かれていませんね

しかし、おそらく c_qag gsl_f :: CFloat -> ・・・ -> CInt -> ・・・
のような定義だと思います(そうでなければ型エラー)

これ、c_qag gsl_f (realToFrac a) ・・・ 100 ・・・ errorPtr
のように使用しても型エラーにならずにコンパイルが通ってしまいますよね

import された実際の C 言語側の関数で、不正な値の引数を検知して、
戻り値でエラーコードを返すような定義になっていればまだ良いのですが、
そうでなければ何が起こるか分からず、危険です

Haskell 側でこの 100 というリテラルをコンパイル時にエラーとして検知できないか、
という趣旨の質問でした