У меня есть тип данных Многочлен 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 на новый путь. Некоторые красные тексты указывают на недостающие файлы из исходных кодов проекта. Как этого избежать?