data Plane = Plane { point :: Point, normal :: Vector Double }
data Sphere = Sphere { center :: Point, radius :: Double }
class Shape s where
intersect :: s -> Ray -> Maybe Point
surfaceNormal :: s -> Point -> Vector Double
Я также сделал экземпляры Plane
и Sphere
Shape
.
Я пытаюсь сохранить сферы и плоскости в том же списке, но это не сработает. Я понимаю, что это не должно работать, потому что Sphere
и Plane
- два разных типа, но оба экземпляра Shape
, так что не должно ли это работать? Как сохранить фигуры и плоскости в списке?
shapes :: (Shape t) => [t]
shapes = [ Sphere { center = Point [0, 0, 0], radius = 2.0 },
Plane { point = Point [1, 2, 1], normal = 3 |> [0.5, 0.6, 0.2] }
]