Я пишу Haskell, но это может быть применено к любому OO или функциональному языку с концепцией ADT. Я дам шаблон в Haskell, игнорируя тот факт, что арифметические операторы уже приняты:Что называется этим абстрактным типом данных?
class Thing a where
(+) :: a -> a -> a
(-) :: a -> a -> a
x - y = x + negate y
(*) :: (RealFrac b) => a -> b -> a
negate :: a -> a
negate x = x * (-1)
В основном это вещи, которые могут быть добавлены и вычитаются, а также умноженные на реальных дробных значений. Одним из примеров может быть простой список чисел: сложение и вычитание попарно (в Haskell, «(+) = zipWith (+)»), а умножение на вещественное умножает каждый элемент в списке на ту же сумму. Я встречал достаточно других примеров, чтобы определить его как класс, но я точно не знаю, как его назвать.
В Haskell его обычно представляет собой моноид при условии наличия нулевого значения.
Это какой-то известный вид объекта в зоопарке алгебраических типов? Я просматривал кольца, полукольцы, близость, группы и т. Д., Не найдя его.
Я бы предложил избегать термина ADT в целом, его можно было бы использовать для «Алгебраических типов данных» или «Абстрактные типы данных», как на языке OO. Я как бы пропустил вопрос из-за этой двусмысленности. –