Реальный мир Haskell книга: не понимаю, пример - PullRequest
3 голосов
/ 28 ноября 2011

В главе 3, есть пример под названием «MySecond.hs», который я действительно не понимаю, это такой код:

safeSecond :: [a] -> Maybe a

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

Ответы [ 3 ]

8 голосов
/ 28 ноября 2011

Это аннотация типа.Если вы не напишите его, Haskell определит его.

В этом случае safeSecond - это имя чего-либо.:: отделяет имя от типа.Он принимает список типа a (a - это переменная типа, эта функция будет работать со списком любого типа.) -> это приложение функции, а Maybe a является типом возвращаемого значения.

Обратите внимание, что 'a'представляет один тип, поэтому, если вы передадите список int, вы должны получить Maybe int.То есть все «а» в типе должны совпадать.

Может быть, это просто тип, который имеет две альтернативы: просто или ничего.

5 голосов
/ 28 ноября 2011

Это сигнатура типа функции.Он предназначен для того, чтобы показать, какие входы и выходы функции предполагается / ожидается.Для большинства кода на Haskell компилятор может вывести его, если вы не укажете его, но настоятельно рекомендуется всегда указывать его.

Помимо того, что вы помните, что функция на самом деле должна делать, это также хороший способдля других, чтобы получить представление о том, что делает функция.

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

Кроме того, поскольку вы читаете RWH, глава 2 описывает это.

2 голосов
/ 29 ноября 2011

Это аннотация типа;он действует как объявление функции в C.

В Haskell объявление типа обычно не является строго необходимым, поскольку Haskell обычно может выводить хороший тип из правильного кода.Однако, как правило, рекомендуется объявлять типы для важных значений, потому что:

  • Если ваш код не правильный, вы, как правило, получаете более полезные сообщения об ошибках (иначекомпилятор может запутаться, пытаясь вывести ваши типы, и получающееся в результате сообщение об ошибке может не быть четко связано с фактической ошибкой).Если вы получаете неясные / подробные сообщения об ошибках, добавление аннотации типов может улучшить их.
  • Особенно если вы начинающий, объявление важных типов может сделать вас менее запутанным в том, что вы делаете -это заставляет вас прояснить ваше мышление, когда вы пишете программу.
  • Как уже упоминалось, аннотация типов действует как активная документация, что делает других людей менее смущенными вашим кодом.Как обычно, «другие люди» могут быть вами, через несколько месяцев.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...