Определение типа данных, который не t хочу быть определенным

У меня есть тип данных Многочлен r для многочленов в Haskell и экземпляр Ring для него. ( класс Ring r, где plus :: r -> r -> r; times :: r -> r -> r; отрицательный :: r -> r; zero :: r; one :: r - это просто упрощенная версия Num).

Теперь я мог бы определить полином, например gauss = x ^ 2 + 1 или eisenstein = x ^ 2 + x + 1 , а затем работать с «Полиномиальным целым / (гауссом)» для целых гауссовских чисел или «Полиномиальным целым / (eisenstein)» для целых чисел Эйзенштейна. Это проблема, я написал это в кавычках, потому что это ' это не настоящий тип данных, и я не могу понять, как его определить.

Сначала я попытался сделать что-то вроде data Quotient p = Quot pp , а затем, например, мы получили бы плюс (Quot ai) (Quot b i ') | i == i '= Quot (plus ab) i Конечно, это уже довольно плохо, но невозможно даже определить один и ноль . Поэтому я изменил его на data Quotient p = Quot p (Может быть, p) , и я думаю, что у меня есть работающая реализация, использующая это, но вы никогда не знаете наверняка, будет ли работать плюс (это необходимо по крайней мере, один Just , и если их два, они должны быть одинаковыми).

Есть ли безопасный по типу (я имею в виду не использование небезопасных функций) способ запрограммировать это в haskell? Я довольно озадачен. Спасибо! Некоторые красные тексты указывают на недостающие файлы из исходных кодов проекта. Как этого избежать?

Когда я перемещаю каталог проекта iphone на новый путь. Некоторые красные тексты указывают на недостающие файлы из исходных кодов проекта. Как этого избежать?

30
задан Cœur 14 March 2019 в 01:21
поделиться