使用Haskell修改数字的类型
我正在开发一个小型符号库,用Haskell进行一些计算 为了表示符号操作,我创建了以下数据类型:使用Haskell修改数字的类型,haskell,instance,ghc,Haskell,Instance,Ghc,我正在开发一个小型符号库,用Haskell进行一些计算 为了表示符号操作,我创建了以下数据类型: data MathExpress = -- A math expression MathDouble Double -- Represent a number | MathAdd MathExpress MathExpress -- Add 2 expressions
data MathExpress = -- A math expression
MathDouble Double -- Represent a number
| MathAdd MathExpress MathExpress -- Add 2 expressions
| MathSoust MathExpress MathExpress -- Subtract 2 expressions
| ...
我设法创建了一个Num
实例,以便能够在我的类型MathExpress
上使用操作符+
和-
instance Num MathExpress where
(+) (expa) (expb) = MathAdd expa expb
(-) (expa) (expb) = MathSoust expa expb
...
当我写作时:
( MathExpress expression ) * MathDouble 2.0
它在工作强>
现在,我希望能够将+
和-
与数字一起使用(Double
或Int
)来编写更简单的代码:
( MathExpress expression ) * 2.0
是否有可能(通过创建实例或任何东西)将Haskell推断为
MathDouble 2.0
?您需要完成Num MathExpress
的实现:
instance Num MathExpress where
fromInteger n = MathDouble (fromInteger n)
...
fromInteger
方法允许数值文本具有多态性,因此1
可以解释为Int
、Integer
、Double
、Complex
,或者在本例中是MathExpress
。如果您想将像2.0
或42.7
这样的数字解释为MathExpress
,那么您还需要实现fractive
typeclass(),特别是fromRational
方法,对于2.0
,它的实现基本上与fromInteger
相同,您还需要fractal
类及其fromRational
方法。