1. ホーム
  2. haskell

[解決済み] Haskellの派生はどのように行われるのですか?

2022-09-26 18:50:47

質問

代数的 データ型 (ADT)のインスタンスになることができます。 型クラス のような)。 Show , Eq ) による 導出 である。

data  Maybe a  =  Nothing | Just a
  deriving (Eq, Ord)

質問ですが、この deriving はどのように機能するのか、つまり、Haskell はどのように派生 ADT の派生型クラスの関数を実装するのか知っているのだろうか?

また、なぜ deriving は特定の型クラスだけに制限されているのか?なぜ派生可能な独自の型クラスを書くことができないのでしょうか?

どのように解決するのですか?

簡単に言うと、マジックです :-). つまり、自動的な導出は Haskell 仕様に組み込まれており、すべてのコンパイラは独自の方法でそれを実装することを選択できます。しかし、それを拡張可能にする方法については多くの作業があります。

導出 は、独自の派生機構を記述するためのHaskell用ツールです。

GHC は以前、派生可能な型クラス拡張として 汎用クラス という派生可能な型クラス拡張を提供していましたが、やや弱かったため、ほとんど使用されませんでした。 現在ではこの機能は削除され、この論文で説明されているような新しい汎用的な導出機構を統合する作業が進行中です。 http://www.dreixel.net/research/pdf/gdmh.pdf

これについては