Shape
すべての形状に共通するいくつかの関数を宣言する型クラスがあります。これらの関数の1つ(refine
)は、サブシェイプのリストを返す必要があります。この制約を表現するために、存在記号を使用します。
data Shapeable = forall a . Shape a => Shapeable a
関数returnを持っています[Shapeable]
。一部の形状は(関数を介して)リファインでき、他の形状は(関数を介しrefine
て)交差をチェックできるという追加の制約がありintersect
ます。これらは相互に排他的であり、それ自体を洗練できる形状は交差をチェックできず、その逆も同様です。
数量化を使用していなかった場合は、さらに2つの型クラスを作成したことにIntersectable
なりRefineable
ます。システムのような単一の型クラス内で互いに素な関数セットを表現する方法はありますか?