Что означает :: (двойное двоеточие) в Haskell? - PullRequest
43 голосов
/ 08 мая 2011

Я вижу и использую символы :: везде , но все еще не знаю, что означает символ :: при программировании на Haskell, например,

run :: Int -> Int -> Int
--  ??

Что означает :: (двойное двоеточие) в Haskell?

Ответы [ 3 ]

38 голосов
/ 08 мая 2011

Вы можете погуглить на haskell "double colon" или похожие вещи;к сожалению, сложно найти синтаксис в Google, но в этом случае вы можете назвать его.

В Haskell ваши программы будут часто работать без него (хотя вы захотите использовать его для уточнения спецификации любого приложения).функции, которые вы определяете, и это хорошая практика).

Идея состоит в том, что вы можете вставить :: ... в любом месте (даже в середине выражения), чтобы сказать "кстати, мистер Компилятор, это выражениедолжен быть типа ... ".Затем компилятор выдаст ошибку, если можно доказать, что это может быть не так.

Я думаю, вы также можете использовать ее для «приведения» функций к нужным версиям;например, если функция «полиморфна» (имеет сигнатуру общего типа) и вы действительно хотите, скажем, Integer, то вы можете сделать :: Integer для полученного значения, возможно;Хотя я немного ржавый.

13 голосов
/ 08 мая 2011

Вы должны прочитать:

foo :: a 

как "имя foo является значением типа a". Когда вы пишете:

run :: a -> b 

это означает:

  1. Вы объявляете имя run.

  2. Это имя будет ссылаться на значение типа a -> b,

Тип a -> b - это тип функции, которая принимает значение типа a и возвращает другое значение типа b.

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

6 голосов
/ 08 мая 2011

Когда у вас появляется страшная ошибка проверки типов, вы можете (временно) обернуть части вашего кода в (myexpression :: MyType), чтобы явно указать компилятору, какой тип вы ожидаете myexpression. Это часто помогает компилятору выдавать вам лучшие сообщения об ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...