Скажем, у меня есть тип, который содержит координаты различных объектов, определенных как:Pattern Matching с типами в Haskell
type Point = (Int, Int)
data Object = A Point
| B Point
| C Point
Я хочу создать функцию, которая будет проверять для перекрытия объектов, как и
checkOverlap:: Object -> Point -> Bool
Я хочу определить только одну функцию, которая будет работать для всех объектов, не указывая «checkOverlap (A point) (x, y)», «checkOverlap (B point) (x, y)» и т. Д.
Я столкнулся с проблемой, но единственным решением, которое я смог найти, является добавление промежуточного типа, который собирал бы все разные объекты, чтобы вы могли сопоставлять шаблоны для этого типа. Однако, поскольку это домашнее задание, мне не разрешено изменять большие куски кода для размещения этого нового типа.
Есть ли другой способ? Возможно, даже не с шаблоном. Просто кажется, что плохое программирование должно копировать одну и ту же функцию несколько раз.
Вы хотите использовать модельные стекла; затем сопоставлять каждому объекту список «точек»; затем определите экземпляры этого typeclass для каждого объекта, а затем ваша функция checkOverlap может использовать ограничение типа, например: 'checkOverlap :: (HasPoints ob) => obj -> Point -> Bool'. –