Я вижу и использую символы ::
всюду, но до сих пор не знаю, что означает символ ::
при программировании в Haskell, например
run :: Int -> Int -> Int
-- ??
Что означает ::
(double colon) в Haskell?
Я вижу и использую символы ::
всюду, но до сих пор не знаю, что означает символ ::
при программировании в Haskell, например
run :: Int -> Int -> Int
-- ??
Что означает ::
(double colon) в Haskell?
Вы можете google для haskell "double colon"
или подобных вещей; это, к сожалению, немного сложно для Google для синтаксиса, но в этом случае вы можете назвать его.
В Haskell ваши программы будут работать нормально без него (хотя вы захотите использовать его, чтобы отточить спецификацию любых функций, которые вы определяете, и это хорошая практика).
Идея состоит в том, что вы можете вставить :: ...
в любом месте (даже в середине выражения), чтобы сказать "кстати, г-н Компилятор, это выражение должно иметь тип ...
". Затем компилятор выдаст ошибку, если это может быть доказано, что это может быть не так.
Я думаю, вы также можете использовать его для "броска" функций в нужные вам версии; например если функция является "полиморфной" (имеет общую подпись типа), и вы действительно хотите, скажем, Integer
, тогда вы могли бы сделать :: Integer
по результирующему значению; Я немного ржавый, хотя.
Вы должны прочитать:
foo :: a
as "имя foo
- это значение типа a
". Когда вы пишете:
run :: a -> b
это означает:
Вы объявляете имя run
.
Это имя будет ссылаться на значение, имеющее тип a -> b
,
Тип a -> b
- это тип функции, которая принимает значение типа a
и возвращает другое значение типа b
.
Вы должны действительно узнать о типах, чтобы понять Haskell. Система типов является одной из наиболее важных особенностей Haskell, и это делает язык настолько выразительным.
Если у вас есть большая страшная ошибка проверки типа, вы можете (временно) обернуть части своего кода в (myexpression :: MyType)
, чтобы явно указать компилятору, тип которого вы ожидаете myexpression
. Это часто поможет компилятору дать вам лучшие сообщения об ошибках.