Они не экспортируются именно для того, чтобы люди не могли делать подобные вещи. Видите ли, тип
data Ratio a = a:%a
содержит слишком много значений . В частности, например, 2/6
и 3/9
на самом деле это одно и то же число в ℚ, и оба представлены 1:%3
. Таким образом, 2:%6
на самом деле является недопустимым значением, и, конечно же, 1:%0
. или это может быть законным, но все функции знают, как с ними обращаться, поэтому 2:%6
для всех наблюдаемых средств равно 1:%3
- я фактически не знаю, какой из этих вариантов выбирает GH C , но, в любом случае, это деталь реализации, которая может измениться в будущих выпусках без предварительного уведомления.
Если сами авторы библиотеки используют такие значения, например, для уловок оптимизации, это одно - в конце концов, они полностью контролируют любые алгоритмы 1031 * подробности и любое неопределенное поведение, которое может возникнуть. Но если пользователи должны создать такие значения, это приведет к нестабильному коду.
Итак - если вы обнаружите, что начинаете алгоритм с 1/0
, тогда вам действительно не следует использовать Ratio
вообще есть, но просто сохраните числитель и знаменатель в простом кортеже, который не имеет таких проблем, и только сделайте окончательный результат Ratio
с %
.