修改号码类型 Haskell
Modify type of number with Haskell
我正在开发一个小型符号库以使用 Haskell 执行一些计算。
为了表示符号操作,我创建了这个数据类型:
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 infer 2.0
作为 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
那么你还需要实现 Fractional
类型类() ,特别是 fromRational
方法,其实现方式与 fromInteger
.
基本相同
我正在开发一个小型符号库以使用 Haskell 执行一些计算。
为了表示符号操作,我创建了这个数据类型:
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 infer 2.0
作为 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
那么你还需要实现 Fractional
类型类(fromRational
方法,其实现方式与 fromInteger
.