Что означают типы в haskell - PullRequest
       16

Что означают типы в haskell

2 голосов
/ 07 апреля 2011

Мне задали этот вопрос в классе, который оставил меня в замешательстве, нам представили следующее:

Для следующих типов объявлений:

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)

Помимо неправильности, этот вопрос смутил меня, потому что яЯ думал, что тип функции - это то, что было объявлено после ::, и поэтому оно уже было дано, нет?

Я мог бы немного пояснить, и я действительно буду признателен за любую помощь.

Ответы [ 2 ]

8 голосов
/ 07 апреля 2011

Тип ranPosition i d равен [Point] - (при каррировании вы получаете функцию, которая возвращает [Point])

Тип getBlockSums i d - [Point] -> [BlockSum] - (при каррировании вы получаете функцию, которая возвращает функцию от [Point] до [BlockSum])

3 голосов
/ 07 апреля 2011

Конечно, но они просили типы выражений , а не функций .

Разве не очевидно, что используются следующие выражения:

foo 
foo a
foo a b

все должны быть разными?Если вам это не понятно, вернитесь и прочитайте о применении функции.

...