请教一个类型转化的问题,麻烦看看代码,短的。
- type Fraction = (Integer,Integer )
- ratfloat :: Fraction -> Float -- convert to floating numbers
- ratfloat (a,b) = a/b
复制代码
我的hugs显示出错信息是
ERROR file:.lab1.hs:46 - Type error in explicitly typed binding
*** Term : ratfloat
*** Type : Fraction -> Integer
*** Does not match : Fraction -> Float
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个 google 一下就有了。
在 hugs 交互环境中,用 :t 可以看一个对象的类型。
复制代码
可以看出,/ 的两个参数的类型必须是在 Fractional 类中的。而 Integer 不在 Fractional 类中,所以直接把 Integer 作为 / 的参数会出错。
fromInteger 把 Integer 型转成其它类型,但具体转成什么类型要看上下文。
复制代码
可以看出,fromInteger 的参数是 Integer,返回值的类型在 Num 类中。
对于表达式 (fromInteger 1)/(fromInteger 2),haksell 的自动类型推导机制能从 / 推导出 fromeInteger 的返回类型在 Fractional 中。
即在这里,fromInteger 1 把 1 转成了小数。
[ 本帖最后由 win_hate 于 2009-3-22 15:36 编辑 ]
请问这个frominteger是什么意思呢?谢谢
复制代码
用 fromInteger 把 Integer 转过来。