Что означают типы в 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
все должны быть разными? Если вам это не понятно, вернитесь и прочитайте о применении функции.