Попробовав 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?
Вы могли бы реализовать что-то вроде
foreign import fromUndefinedWithDefault :: forall a. a -> Undefined a -> a
вместо этого повторно используя то, что вы сделали, чтобы определить isUndefined
.
Тип, который вы написали, не может быть реализован, потому что безопасно, потому что я мог бы использовать его для определения
bad :: Void
bad = getFromUndefined (head [])