Haskellのgeneric deriving

GHC拡張として開発が進められているgeneric derivingについて、 質問したときのやりとりを集めてみました。 将来のHaskell規格に含まれる可能性が高いそうです。
2
shelarcy(しぇらーしぃ) @shelarcy

「組み込みの型クラスや newtype deriving などと同様に、generic derving でも deriving 節を利用した単純な導出インスタンス宣言を使えるようにする」ための機能を入れようという提案が行われていますね。 http://t.co/RzJsIkT

2011-09-06 08:30:48
白帽子 @sbwhitecap

GHCの拡張みたいですが、こういう提案が次のHaskell規格に入ることはありますか QT @shelarcy: 「組み込みの型クラスや newtype deriving などと同様に、generic derving でも deriving 節を利用した単純な導出インスタンス宣言

2011-09-06 13:55:03
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap generic deriving は現在の Haskell 規格の deriving を置き換えることを目指して開発されている機能なので、将来的には言語規格の一部となると思います。 http://j.mp/oRXSix

2011-09-06 16:28:52
白帽子 @sbwhitecap

@shelarcy 適用範囲が広がるのですか

2011-09-06 16:29:36
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap それが目的ですね。generic deriving を使えば、deriving 宣言の対象になっている型クラス同様、自分で定義した型クラスに対するインスタンスのメソッドの定義を自動的に生成できます。

2011-09-06 16:33:13
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap ただ、現段階で次の Haskell 2011 (2012) に入れることはできませんね。

2011-09-06 16:29:39
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap Haskell 2011 に入れる機能は既にある程度固まっている [http://j.mp/dKcV70 ] のと、GHC 版 generic deriving はまだ完成していない [http://j.mp/nOYVi3 ] ためです。

2011-09-06 16:29:51
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap また、generic deriving は現在の Haskell の言語規格に入っていない「複数パラメータの型クラス(MultiParamTypeClasses)[http://j.mp/o6cC4E ]」という言語拡張を必要とします。

2011-09-06 16:34:15
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap なので、まずは MultiParamTypeClasses が Haskell の言語規格に入らないと、 generic deriving を取り入れられることはできません。

2011-09-06 16:35:19
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap (GHC 版 generic deriving では型族を使っていますが、UHC に実装されているオリジナルのバージョンでは型族を利用していないので、この部分は考慮しなくて良いと思います。 http://j.mp/cthtMW

2011-09-06 16:36:25
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap GHC 拡張の一つで、関数従属性(FunctionalDependencies こっちは知ってますか?)の代替として開発されている機能です。 http://j.mp/nLTlw8

2011-09-06 16:42:47
白帽子 @sbwhitecap

@shelarcy 関数従属性は知らないです…

2011-09-06 16:43:55
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap 型クラスに複数の型パラメータを与えられるようにした場合、型の一つが決まった時に他の型も決定されないと、型推論がうまくいかなくなる可能性があります。そこでこの問題を解決するために、複数の型のうち一つが決まれば他の型も決まるという規則を定義するための機能です。

2011-09-06 16:48:29
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap で、複数パラメータの型クラスの問題を解決するために提供されている機能のうち、一つが関数従属性で、関数従属性を置き換えるために開発されているもう一つの機能が型族という感じです。 c.f. http://j.mp/nnBacn

2011-09-06 16:54:27
白帽子 @sbwhitecap

要は型推論を補強する拡張ってことでいいのかな? #Haskell

2011-09-06 16:49:56
shelarcy(しぇらーしぃ) @shelarcy

そうです。型推論を補強するための式を型で書きたいというのが、型族と関数従属性の motivation です。 QT @sbwhitecap: 要は型推論を補強する拡張ってことでいいのかな? #Haskell

2011-09-06 17:01:47
shelarcy(しぇらーしぃ) @shelarcy

@sbwhitecap だから、関数従属性の関数は、普通の Haskell で提供されている「式に対する関数」ではなくて、型から型を求める「型に対する関数」ですね。

2011-09-06 17:03:49