Как преобразовать частичные функции в безопасные (возможно) функции?

Я хочу, чтобы он использовал определенную библиотеку частичную функцию более удобным, или записывал обратный вызов с частичным сопоставлением с образцом
как это,

partialMaybe :: forall a b. (Partial => a -> b) -> a -> Maybe b

Я не мог найти подобное в некоторых крупных библиотеках.
Как это определить? или уже определено в библиотеках?

data ABC a = A a | B a | C a

f1 = someHigherOrderFunc $ partialMaybe \(A a) -> someFunc a -- if not 'A', return Nothing.

-- same as
f2 = someHigherOrderFunc $ case _ of A a -> Just $ someFunc a
                                     _   -> Nothing -- requires line break, seems syntax redundant...

используя: Purescript 0.11.6


Редактировать:

Я это сделал...

partialMaybe :: forall a b. (Partial => a -> b) -> a -> Maybe b
partialMaybe f a = runPure $ catchException (const $ pure Nothing) (Just <<< unsafePartial f <$> pure a)

это... хм... очень уродливо это не.
Исключение "Неудачное сопоставление с образцом" генерируется purescript.
поэтому я думаю, что это должно быть в состоянии справиться с Purescript.
Не можете сделать это?

1 ответ

Если вы хотите исключение, если дело пропущено, используйте Partial, Если вы хотите иначе, используйте Maybe или же Either или другой подходящий тип суммы.

Вы можете поймать исключение, выброшенное при неудачном сопоставлении с образцом. При неудачном сопоставлении с шаблоном нет способа не выдать исключение.

Другие вопросы по тегам