免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3092 | 回复: 2
打印 上一主题 下一主题

这段代码有什么问题? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-03 02:01 |只看该作者 |倒序浏览
刚学Haskell,怎么编译不过去?

  1. D:\FP\Haskell>type main.hs
  2. module Main where
  3.   main = fib 5
  4.   fib 1 = 1
  5.   fib 2 = 1
  6.   fib x = fib (x-1) + fib (x-2)

  7. D:\FP\Haskell>ghc --make main.hs -o fib.exe
  8. [1 of 1] Compiling Main             ( main.hs, main.o )

  9. main.hs:2:9:
  10.     No instance for (Num (IO t))
  11.       arising from a use of `fib' at main.hs:2:9-13
  12.     Possible fix: add an instance declaration for (Num (IO t))
  13.     In the expression: fib 5
  14.     In the definition of `main': main = fib 5

  15. D:\FP\Haskell>
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-09-03 08:41 |只看该作者
main 的类型是有要求的(想想 C 语言就知道了),
main 必须得是 IO 类型,
因此你可以写成这样:

  1. module Main where

  2. main = print $ fib 5

  3. fib 1 = 1
  4. fib 2 = 1
  5. fib x = fib (x-1) + fib (x-2)
复制代码


应该就可以编译了。

BTW:注意缩进要像我那样。这是惯例。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2008-09-03 09:31 |只看该作者
原帖由 flw 于 2008-9-3 08:41 发表
main 的类型是有要求的(想想 C 语言就知道了),
main 必须得是 IO 类型,
因此你可以写成这样:

module Main where

main = print $ fib 5

fib 1 = 1
fib 2 = 1
fib x = fib (x-1) + fib (x-2)
...


哈哈,多谢,豁然开朗。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP