Предположим, что у меня есть следующее:
class Shape a where
draw a :: a -> IO ()
data Rectangle = Rectangle Int Int
instance Shape Rectangle where
draw (Rectangle length width) = ...
data Circle = Circle Int Int
instance Shape Circle where
draw (Circle center radius) = ...
Есть ли способ определить список фигур, пройти через список и вызвать функцию рисования для каждой фигуры? Следующий код не будет компилироваться, потому что элементы списка не все одинаковы:
shapes = [(Circle 5 10), (Circle 20, 30), (Rectangle 10 15)]
Я знаю, что я думаю в OO-способе и пытаюсь применить его к Haskell, и это может быть не лучший подход. Какой был бы лучший подход Haskell для программ, которые должны иметь дело с коллекциями различных типов объектов?