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

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

Для объявлений типа сильфона:

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 ответа

Решение

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

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

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

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

foo 
foo a
foo a b

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

Другие вопросы по тегам