В Haskell мы часто используем тип данных Maybe
, когда не уверены, получим ли мы в результате значение или вообще ничего. Это эквивалентно обнуляемому типу в более традиционном языке, таком как Java.
Maybe
определяется следующим образом:
data Maybe a = Nothing | Just a
То есть, значение может быть Nothing
или Just a
, где a
- это объект, который вы искали. Например, если вы искали строку "foo"
с помощью функции lookup
, и в вашем списке был кортеж ("foo", "bar")
, вы получите результат Just "bar"
. Однако, если вы посмотрите вверх "xyzzy"
, вы получите Nothing
.
Мы можем взять значение Maybe
и превратить его во что-то более полезное, используя функцию maybe
(я знаю, что вводит в заблуждение имена - функция строчная) Это определяется следующим образом:
maybe default f (Just a) = f a
maybe default f Nothing = default
Первый параметр является значением по умолчанию. Это то, что мы вернем, если у нас есть Nothing
. В противном случае мы получаем функцию f
, примененную к a
, где a
- это то, что нам нужно. Если вы просто хотите вернуть a
, вы можете передать функцию id
как f
:
maybe default id (Just a) = id a
Полезно, id a = a
.
Если вы хотите продолжить использовать свой текущий lookup
план, вот как вы получите от него что-то полезное. Я лично предпочитаю метод sth - это будет проще на процессоре.