我在课堂上被问到这个问题让我很困惑,我们得到了以下内容:
对于波纹管类型声明:
ranPositions :: Image -> Dims -> [Point]
getBlockSums :: Image -> Dims -> [Point] -> [BlockSum]
i :: Image
d :: Dims
以下哪些类型? 不是上面的那个吗?!
ranPositions i d
getBlockSums i d
所以我回答的是:
type ranPositions = Array Point Int, (Int, Int)
type getBlockSums = Array Point Int, (Int, Int)
// Because (this was given)
type Image = Array Point Int
type Dims = (Int, Int)
除了错误之外,这个问题让我困惑,因为我认为函数的类型是在::
之后声明的,因此它已经被赋予了,不是吗?
我可以做一些解释,我真的很感激任何帮助。
答案 0 :(得分:8)
ranPosition i d
的类型为[Point]
- (currying为您提供了一个返回[Point]
的函数)
getBlockSums i d
的类型为[Point] -> [BlockSum]
- (currying为您提供了一个函数,可以将函数从[Point]
返回到[BlockSum]
)
答案 1 :(得分:3)
当然,但是他们要求表达式的类型,而不是函数。
以下表达式的类型不明显:
foo
foo a
foo a b
一定都不一样吗?如果您不清楚这一点,请返回并阅读有关功能应用程序的信息。