Привет. Задумал совместить важное и нужное с полезным, а именно решил начать изучать haskell, а заодно и написать на нём очередную имэджбоарду набор сценариев/или какой-то проектик (пока не сформировал мысль, что именно это должно быть, возможно, некоторое моделирование каких-нибудь процессов)
Нужны комплексные числа. Действительная и мнимая часть их может быть иррациональной. Числа pi там скорее всего не будет, но будет (sqrt 2), насчёт остальных корней пока не знаю, актуально ли. Ну в идеале чтобы можно было представить числа в любой рациональной степени (2 в степени 1/2, например, что и есть sqrt 2).
Хотелось, чтобы эти степени и корни не вычислялись, а представлялись в памяти как есть (haskell ведь ленивый язык?), и в случае необходимости сами себя упрощали (если я умножаю sqrt 2 на самого себя, я получаю же 2?)
Может быть и не любое иррациональное число можно так представить... но мне и не все нужны, а только простые случаи.
Понятно, почему я не хочу real/float - неизбежные потери точности. Можно постоянно применять округления, но, думаю, тут я могу получить неожиданности. Потери в производительности меня не смущают, не думаю, что они пока актуальны.
Так вот, мой вопрос в том - есть ли что-то уже готовое может быть? Я ничего не нашёл... похоже, придётся делать самому. Стандартный тип Complex вроде как работает с Float/Double либо Int, либо Rational, что немного не то... если я не ошибся?
P.S. Знаю, что, возможно, всё это есть в Maple, и, может быть, даже в mathematica или maxima, но это как-то «не спортивно» что ли. :) Да и не хочется зависеть от математических пакетов.