0
我在haskell程序中实现CSG。 当我在OOP语言中做到这一点时,我受到了复合赞助人的启发。我有一个抽象类“对象”,一些具体的对象(球体,平面等)和一个具体的类“CompositeObject”,一个运算符和两个指向Object的指针。功能性编程中的建设性固体几何
为了实现在Haskell这样,我是在一个递归数据类型想着CSG树:
data Shape = Sphere (..some types here..)
| ..other primitive objects..
| Composite Shape Op Shape
然后我在通过模式匹配对象定义的功能。 这里的问题是,所有的对象都必须在这个模块中。所有的物体都集中在一块巨石中。
我认为这是具有一个对象的类型类是一个好主意:
class Shape a where
intersection :: Ray -> a -> [Points]
normal :: Point -> a -> Vector
...
现在我定义球体,平面,cilinder实例等
但对于复合对象?我如何创建一个由两种类型构造的类型,类的功能取决于构造函数,或类似的东西?