小编use*_*706的帖子

为什么Haskell类型系统无法捕获这个?

以下编译没有警告或错误.

factors n = [x | x<-[1..n], n `mod` x == 0]
perfects n = [x | x <- [1..n], x == sum (factors (init x))]
main = putStrLn "hello"
Run Code Online (Sandbox Code Playgroud)

即使我犯了错误.

perfects n = [x | x <- [1..n], x == sum (factors (init x))]  -- incorrect
perfects n = [x | x <- [1..n], x == sum (init (factors x))]  -- should have been
Run Code Online (Sandbox Code Playgroud)

静态类型检查在哪里进行救援?

我认为应该抓住错误的原因是:

  • factor显然期望一个Integral因为它的参数使用mod,而init返回aList
  • 更何况x从绘制List …

haskell compiler-errors typechecking

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

标签 统计

compiler-errors ×1

haskell ×1

typechecking ×1