我几天前开始学习Haskell,现在我正在学习函数类型。
使用元组,代码可以正常工作。
add1 :: (Int,Int) -> Int
add1(x,y) = x + y
但是如果我想在不使用元组的情况下执行相同的功能呢?
我已尝试过两种功能定义
add2 :: Int, Int -> Int
add2 :: Int Int -> Int
与
add2 a b = a + b
但是这两个函数定义不能编译。我做错了什么?
答案 0 :(得分:3)
你的类型应该是
add2 :: Int -> Int -> Int
添加括号将显示此类型的实际含义。
add2 :: Int -> (Int -> Int)
因此,add2是一个接受int的函数,并返回另一个函数(类型Int -> Int
)。您可以按如下方式使用
add2 1 -- this returns a function, type Int -> Int
或者,添加第二个参数以获得最终的Int
(add2 1) 2 --same as "add2 1 2", returns an Int value 1+2=3
答案 1 :(得分:1)
您也可以使用咖喱(http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:curry):
$3458.5