let fun1 = (+3)
let fun2 = (-3)
let range = [1,2,3,3]
let a = map fun1 range
let b = map fun2 a
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
约束中的非类型变量参数:Num(a - > b)
Haskell的静态性质让我很头疼......
实际上,这里的语法比类型系统更让你头疼.那是因为(-3)实际上是数字" 减三 ":
fun2 :: Num a => a
Run Code Online (Sandbox Code Playgroud)
所以问题是你没有真正提供一个函数,而是更多的常量.
你可以通过编写来解决它:
let fun2 = \x -> x-3
Run Code Online (Sandbox Code Playgroud)
要么:
let fun2 = (+) (-3)
Run Code Online (Sandbox Code Playgroud)
Haskell的静态性质让我很头疼......
实际上,当用Haskell编写程序时我会睡得更好,因为在动态类型语言中你常常有" 狼人日 ":所有出错的日子.