'`#に対して'` *種類と一致しませんでした:は一体ここで何が起こっているか
"Couldn't match kind `*' against `#'"
私はTemplateHaskell(ghci -XTemplateHaskell
)を使用して、GHCiの中で次のことをしようとしていた
$(reify ''Show >>= dataToExpQ (const Nothing))
を私はこれからExp
を得ることを望んでいました(これはShowのインスタンスを持っています)。私は、実際のデータとして文字列としてではなく利用できるように、アプリケーション内にhaskell型に関する情報を挿入するためにこれを行っています。
が私の目標は以下の通りです:
info :: Info
info = $(reify ''Show >>= dataToExpQ (const Nothing))
私は本当にとにかく「#」が何であるか、そのエラーメッセージを理解していませんか? #
がある場合は、# -> #
または* -> #
ですか?それは型のような種類に関係するものですか(私はそれが何であるかも知りませんが)?
さて、GHCには種類の階層があり、 `# 'は特別な種類のボックス化されていない種類です。すべてうまくいっていますが、なぜこのエラーはポップアップしますか?たぶんunboxed型はgenercisでうまくいっていないのでしょうか?
私は、ボックス化されていない型はコンパイラによって最適化されていると考えているので、これは私にとってまだ意味があるとは思えません。また、データのインスタンスが存在する場合、データ構造に含めることができるすべての型に対して、そのインスタンスが存在する必要があるとも考えました。
さらに調査すると、Namesが問題を提起すると思いますが、dataToExpQでそれらを回避する方法はありますか?とにかくその議論をどのように使うか?
'#'は非ボックス型の種類です。http://stackoverflow.com/a/3034295/700253を参照してください。 – Vitus
ヒントのおかげで。そう:どのように問題を解決する:-)? – scravy