типы FFI purescript для безопасного импорта функций JavaScript

1

Попробовав purescript FFI и следуя книге "Purescript By Example", я создал файл JS для получения заголовка массива:

exports.head = function(arr) {
  return arr[0];
};

И в purescript я объявляю новые Undefined данные для сигнатуры типа head, чтобы указать undefined возвращенный, когда массив пуст:

foreign import data Undefined :: Type -> Type
foreign import head :: forall a. Array a -> Undefined a

Теперь, как использовать значение типа Undefined a? Какую функцию мне нужно определить для извлечения a чтобы я мог использовать ее в другом месте? Пример в книге следует только определением функции:

foreign import isUndefined :: forall a. Undefined a -> Boolean

как:

exports.isUndefined = function(value) {
  return value === undefined;
};

но мне нужно что-то вроде:

foreign import getFromUndefined :: forall a. Undefined a -> a

Можно ли написать эту функцию в JS, и в этом случае, что вернуть, когда Undefined a действительно undefined? Или, альтернативно, могу ли я переопределить тип Undefined a чтобы позволить patern сопоставлять его, чтобы извлечь a?

Теги:
ffi
purescript

1 ответ

1
Лучший ответ

Вы могли бы реализовать что-то вроде

foreign import fromUndefinedWithDefault :: forall a. a -> Undefined a -> a

вместо этого повторно используя то, что вы сделали, чтобы определить isUndefined.

Тип, который вы написали, не может быть реализован, потому что безопасно, потому что я мог бы использовать его для определения

bad :: Void
bad = getFromUndefined (head [])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню