2

我在课堂上被问到这个问题让我很困惑,我们得到了以下内容:

对于波纹管类型声明:

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)

除了错误之外,这个问题让我感到困惑,因为我认为函数的类型是在之后声明的::,因此它已经给出了,不是吗?

我可以做一些解释,我将非常感谢任何帮助。

4

2 回答 2

8

的类型ranPosition i d[Point]- (currying 给你一个返回的函数[Point]

的类型getBlockSums i d是- (currying 为您提供了一个从to[Point] -> [BlockSum]返回函数的函数)[Point][BlockSum]

于 2011-04-07T13:10:48.920 回答
3

当然可以,但他们要求的是表达式的类型,而不是函数

以下表达式的类型不是很明显:

foo 
foo a
foo a b

都必须不同吗?如果您不清楚这一点,请返回并阅读有关功能应用程序的内容。

于 2011-04-07T13:10:00.147 回答