purescript - моделирование функции, которая выдает исключение - PullRequest
1 голос
/ 16 марта 2020

Предположим, у меня есть Javascript функция f, которая выдает исключение.

Я хотел бы представить его на стороне Purescript как

foreign import f :: a -> Either e b

, где e это тип сгенерированного исключения.

Я мог бы добиться этого, перехватив исключение и поместив результат f в конструкторы Either, но это кажется грязным решением, поскольку я использовал бы данные Purescript конструкторы на стороне Javascript.

Есть ли лучшее или более стандартное решение для этого?

1 Ответ

3 голосов
/ 16 марта 2020

Обычный способ go о построении данных PureScript из JavaScript - передать конструкторы в виде функций. Ваша JS функция будет принимать два дополнительных параметра:

// JavaScript
exports.f_ = left => right => a => {
    try { return right(whatever(a)); }
    catch(e) { return left(e); }
}

Затем в PureScript вы импортируете функцию, но не экспортируете ее потребителям. Вместо этого создайте оболочку, которая передает конструкторы Left и Right, и экспортируйте , :

-- PureScript
module MyModule(f) where

foreign import f_ :: forall a b e. (e -> Either e b) -> (b -> Either e b) -> a -> Either e b

f :: forall a e b. a -> Either e b
f = f_ Left Right
...