相关疑难解决方法(0)

Haskell类型强制

我试图围绕Haskell式强制进行包裹.意思是,何时可以将值传递给函数而不进行强制转换以及如何工作.这是一个具体的例子,但我正在寻找一个更普遍的解释,我可以使用它来尝试理解发生了什么:

Prelude> 3 * 20 / 4
15.0
Prelude> let c = 20
Prelude> :t c
c :: Integer
Prelude> 3 * c / 4

<interactive>:94:7:
    No instance for (Fractional Integer)
      arising from a use of `/'
    Possible fix: add an instance declaration for (Fractional Integer)
    In the expression: 3 * c / 4
    In an equation for `it': it = 3 * c / 4
Run Code Online (Sandbox Code Playgroud)

(/)的类型是分数a => a - > a - > a.所以,我猜测当我使用文字做"3*20"时,Haskell会以某种方式假设该表达式的结果是一个Fractional.但是,当使用变量时,它的类型根据赋值预定义为Integer.

我的第一个问题是如何解决这个问题.我是否需要转换表达式或以某种方式转换它?我的第二个问题是,对我来说这似乎很奇怪,你不能做基本的数学而不必担心int/float类型.我的意思是有一种明显的方法可以在这些之间自动转换,为什么我不得不考虑这个并处理它?我开始做错了吗?

我基本上是在寻找一种方法来轻松编写简单的算术表达式,而不必担心整洁的细节,并保持代码的美观和干净.在大多数顶级语言中,编译器对我有用 - 而不是相反.

haskell

2
推荐指数
2
解决办法
2169
查看次数

标签 统计

haskell ×1