Как уже говорили другие, ()
в Haskell является как название типа «единицы», и единственное значение указанного типа.
Одна из запутывающих вещей в переходе от императивного программирования к Haskell заключается в том, что способ, которым языки имеют дело с понятием «ничего», отличается. Более запутанным является словарь, потому что императивные языки и Haskell используют термин «пустота» для обозначения диаметрально разных вещей.
В императивном языке, «функция» (которая не может быть истинной математической функции) может быть «пустота» в качестве типа возвращаемого значения, так как в этом псевдокода, например:
void sayHello() {
printLn("Hello!");
}
В этом случае, void
означает, что «функция», если она вернется, не приведет к результату результата. (Другая возможность заключается в том, что они не могут возвращаться, они могут зацикливаться навсегда или с ошибкой или исключением.)
В Haskell, однако, все функции (и действия IO
) должны приводить к результату. Поэтому, когда мы пишем IO
действие, которое не производит каких-либо интересное возвращаемое значение, мы делаем его вернуть ()
:
sayHello :: IO()
sayHello = putStrLn "Hello!"
Дальнейшие действия будут просто игнорировать значение ()
результата.
Теперь вам, вероятно, не нужно слишком беспокоиться об этом, но есть одно место, где это запутывает, а это то, что in Haskell there is a type called Void
, но это означает нечто совершенно отличное от императивного программирования void
. Из-за этого слово «пустота» становится минным полем при сравнении Haskell и императивных языков, потому что значение полностью отличается при переключении парадигм.
В Haskell Void
- это тип, который не имеет любых значений. Самым большим следствием этого является то, что в Haskell функция с возвращаемым типом Void
никогда не может вернуться, она может только сбой или ошибка навсегда. Зачем? Потому что функция должна была бы получить значение типа Void
для возврата, но такого значения нет.
Это, однако, не актуально, пока вы не работаете с более продвинутыми методами, поэтому вам не нужно беспокоиться об этом, кроме как остерегаться слова «пустота»."
Но больше урок заключается в том, что необходимо и понятия Haskell„нет возвращаемого значения“отличаются Haskell различает:.
- Вещи, которые могут возвращение, но результат которого не будет иметь никакого информацию (
()
тип);.
- Вещи, которые не могут возврата, независимо от того, что (
Void
типа)
Обязательный void
соответствует первому, а не последнему.
В общем, чтобы ответить на вопрос «есть« X »тип», введите ': k X' в ghci, чтобы попытаться определить его вид. Если 'X' является типом, вы получите что-то вроде' X :: * ', считаете, что« 'X» имеет вид _type_ ». В противном случае будет поднята ошибка. – phg