将Ord转换为分数

时间:2019-04-14 20:11:35

标签: haskell

如何将max函数给定的Ord数转换为小数。 或者如何将具有2个约束(x::( Ord a,Fractional a)=> a)的数字转换为int?

不要担心RE

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 ::(Fractional a)”部分中,我需要将Ord a添加到该约束中,否则它将失败。但是,尽管没有函数将该数字转换为int,但我仍然坚持使用小数和ord的数字。理想情况下,我想要一个将ord转换为小数的函数。

1 个答案:

答案 0 :(得分:6)

  

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

可以订购的东西比小数还多,例如。 "abcd" < "abce",但"abcd" / "abce"是什么?

  

尽管没有函数将该数字转换为int,但我坚持使用小数和ord数。

如果大家都知道FractionalOrd,那么您如何知道存在明智的-> Integer转换呢?例如,考虑Data.Complex Double(基本上只是一个复数)-我们可以加,减,除偶(即,它是Fractional),但是对于{{1} }?没有一个好的定义。

目前尚不清楚您到底想达到什么目的,但是,我能想到的最接近的是添加一个toInteger (1 + i)约束。这将为您提供所需的功能(例如RealFrac atruncateroundceiling),以转换为floor类型。