Haskell 将Ord转换为小数

Haskell 将Ord转换为小数,haskell,Haskell,如何将max函数给出的Ord数转换为分数。 或者如何将一个有2个约束条件(x::(Ord a,分数a)=>a)的数字转换成整数 不要为你担心 seemore :: (Fractional a) => RE b -> a -> a seemore (a:+:b) x = seemore (a) (x) + seemore b x seemore (a:|:b) x = max (seemore a y) (seemore b z) where y = x

如何将max函数给出的Ord数转换为分数。 或者如何将一个有2个约束条件(x::(Ord a,分数a)=>a)的数字转换成整数

不要为你担心

seemore :: (Fractional a) => RE b -> a -> a
seemore (a:+:b) x = seemore (a) (x) + seemore b x
seemore (a:|:b) x = max (seemore a y) (seemore b z)
   where y = x
         z = x
seemore (Symbol a) x = x
seemore Empty x = 0
seemore (Repeat(a)) x = 1/0
seemore (Plus(a)) x = 1/0
在“seemore::(分数a)”部分中,我需要将Ord a添加到该约束中,否则它将失败。但是,我仍然坚持使用一个分数和ord的数字,尽管没有函数可以将这个数字转换成int。理想情况下,我需要一个将ord转换成分数的函数

理想情况下,我需要一个将ord转换为分数的函数

可以排序的东西比小数的多得多,例如,
“abcd”<“abce”
,但什么是
“abcd”/“abce”

我被一个分数和ord的数字所困扰,尽管没有函数可以将这个数字转换成整数

如果大家都知道是
分数
Ord
,那么如何知道存在一个合理的
->整数
转换?例如,考虑<代码>数据复合体双< /代码>(基本上只是一个复数)-我们可以添加、减去、除偶数(即,它是代码>分数< /代码>),但是什么会使数学意义成为<代码> to-整数(1 +i)< /代码>的答案?没有一个好的定义


现在还不清楚您到底想要实现什么,但是,我能想到的最接近的方法是添加
RealFrac a
约束。这将为您提供所需的功能(例如,
truncate
round
天花
floor
)以转换为
整型
类型。

如果这两种类型不是
Ord
,您打算如何最大限度地利用这两种类型?复数是分数,但它们肯定不是有序的。
-1+i
1-i
的最大值是多少?如果我们不需要担心
RE
,您应该将其从问题中删除。您可以编写一个
分数a=>a->a
类型的函数,在没有它的情况下演示您的问题。您需要能够使用任何可能的数字类型的具体原因是什么?如果希望所有类型都是
Int
,只需说
Int