nox*_*xus 5 haskell functional-programming
在学校的最后一个小时,我们开始学习Haskell.我们使用Helium编译器因为它快速且易于使用.
我开始在输入标准功能,如*,+...但分工不工作.我试过5 / 2或4 / 2得到这个消息:
"Type error in infix application
expression : 3 / 5
operator : /
type : Float -> Float -> Float
does not match : Int -> Int -> a "
Run Code Online (Sandbox Code Playgroud)
我如何使用等分运营商获得2.5来自5 / 2?
我试过,div 5 2但后来我得到了2而不是2.5
根据文档
- 数字文字不会过载(即使使用
--overloading标志).因此,3是类型Int和3.0类型Float.结果是你永远不能写2 + 2.3,虽然在重载模式下你可以写两个2 + 3和2.0 + 3.0.
另外:
- 有五个内置类型类,包含以下实例:
- Num :
Int,Float
因此,为了获得浮点除法,您必须使用显式浮点文字,例如5.0 / 2.0.
值得一提的是,在Haskell本身(氦仅仅是哈斯克尔的一个子集)表达5 / 2良好类型的,将有型Fractional a => a,但氦气不会出现有Fractional类型类可言,只有Int和Float为数字类型,所以究竟是怎样有效的Haskell可以像你期望的那样工作在Helium中不起作用.
如果你使用Helium,你可能会cabal根据网站的说明安装它:
> cabal install helium lvmrun
Run Code Online (Sandbox Code Playgroud)
那么你应该有权访问GHC和GHCi.尝试运行GHCi作为交互式shell,看看是否有帮助.您可能会遇到最初比Helium更难读取的错误,但Haskell的类型错误在绝大多数情况下都非常有用.
错误消息表明/需要浮点(“实数”)数字,而您提供整数。
您可以将参数显式设置为浮点型5.0 / 2.0:
您可以将值转换为浮点(在 GHC 中工作,没有尝试 Helium):
let a = 1::Int
let b = 2::Int
-- here a / b gives a type error like you reported
show $ fromIntegral a / fromIntegral b -- works
Run Code Online (Sandbox Code Playgroud)