Я пытаюсь использовать свой собственный тип данных в haskell для простых чисел, но в настоящее время я сталкиваюсь с несколькими проблемами.
newtype Prime = Prime Integer deriving (Eq, Ord, Typeable, Show)
Как только я выполняю какую-либо числовую операцию с простым числом (например, фи-функцию ниже), я хочу обработать результат как целое число, но я не знаю, как это сделать.
phi :: Prime -> Prime -> Integer
phi p q = (p-1)*(q-1)
phi должен возвращать целое число, потому что это больше не простое число. Все, что я получаю, это ожидаемое сообщение об ошибке:
• Couldn't match expected type ‘Integer’ with actual type ‘Prime’
• In the expression: (p - 1) * (q - 1)
In an equation for ‘genPhi’: genPhi p q = (p - 1) * (q - 1)
Итак, как я могу преобразовать свой пользовательский тип в целое число? У меня нет большого опыта работы с Haskell.
toInteger
из класса типовIntegral
для общего преобразования, но это потребовало бы реализации всех арифметических операций над вашим типом, которые не работают для подмножества простых чисел. - person Bergi   schedule 31.12.2020