Возможно, вы рассуждаете по аналогии, полагая, что «неопределенные» является Haskell эквивалент указателя ничтожной или нулевой ссылки на ОО-языке. Это не так. В Haskell неопределенное значение - это просто ошибка, ожидающая своего появления.
Если вам нужно дополнительное значение (тип вещи, на котором вы должны использовать нулевую ссылку на других языках), то вы хотите, возможно. Так, например, Maybe Int является либо «Nothing», либо «Just 5».Так, например, функция «поиск» имеет тип
lookup :: Eq a => a -> [(a, b)] -> Maybe b
Это говорит о том, что она выглядит вещи в списке пара путем сопоставления по ключевому элементу (типа «а»), а затем возвращает второй элемент в паре (тип «b»). Конечно, он может не найти ключ, поэтому в этом случае он возвращает «Nothing».
lookup "foo" [("foo", 1), ("bar, 2)] gives Just 1
lookup "wib" [("foo", 1), ("bar, 2)] gives Nothing
Чтобы получить результат из «Может быть» вы используете сопоставления с образцом:
case lookup myKey theTable of
Just result -> putStrLn $ "Found " ++ show result
Nothing -> putStrLn "Key not found"
Вы можете также использовать «может быть» и функции «fromMaybe» в Data.Maybe. Если вы абсолютно уверены, что значение действительно существует, вы также можете использовать «fromJust», но вам нужно быть очень уверенным, и даже тогда вы, вероятно, должны иметь явный случай для Nothing, чтобы вы могли дать полезное сообщение об ошибке, когда вы оказываетесь неправы.
Edit: объяснение того, почему мы это делаем этот путь
Причина, по которой Haskell не имеет нулевые ссылки, как и другие языки в том, что они по своей сути неоднозначным. Когда любое значение может быть «Null», вы не можете быть уверены, следует ли вам проверять нуль или нет. Таким образом, в приведенном выше примере «lookup» наличие возвращаемого типа «Maybe b» делает его однозначным, и, кроме того, если вы забудете проверить, то компилятор вам скажет. Напротив, если «lookup» вернул ссылку, которая может быть нулевой, как должен знать вызывающий? Что произойдет, если один из аргументов «lookup» также был нулевым. Это будет ошибка? Наличие нулевых ссылок означает, что единственные способы узнать - прочитать код или надеяться, что он попал в документацию.
Undefined немного напоминает значение ошибки. Если вы его оцениваете, это вызывает ошибку. Это * не * значение данных. – AJFarmar
Haskell не имеет нулевого указателя/нулевого значения: он был разработан, чтобы избежать ошибки в миллиард долларов (https://en.wikipedia.org/wiki/Null_pointer#History). – chi