私はHaskellWiki > Existential type # Dynamic dispatch mechanismを見ています。動的ディスパッチ、スマートコンストラクタ、Template Haskellおそらく?
そして、私はこの部分を取るためにテンプレートHaskellのやり方があるはず、と思っています:
class Shape_ a where
...
type Radius = Double
data Circle = Circle Radius
instance Shape_ Circle where
...
と、自動的にこの部分を引き出す:
-- derive the data type
data Shape = forall a. Shape_ a => Shape a
-- derive smart constructors similar to the original constructor
circle :: Radius -> Shape
circle r = Shape (Circle r)
このテンプレートHaskellで行われています?これはTHでできますか?普通の古いHaskellでスマートコンストラクタのすべてを手作業で書く必要なく、同様のことができますか? THよりも強力な特別なプリプロセッサが必要でしょうか?
他の言葉で言えば、 "はい!Template Haskellはこれを行うことができます!" :) ConstraintKindsに関するヒントをありがとう、それはかなりクールです。 –
えええええええええええええええええええええええええええええええええええええええええええええええと、手動でASTを分析して構築するのは楽しいことです。 – glaebhoerl