Как преобразовать частичные функции в безопасные (возможно) функции?
Я хочу, чтобы он использовал определенную библиотеку частичную функцию более удобным, или записывал обратный вызов с частичным сопоставлением с образцом
как это,
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
или другой подходящий тип суммы.
Вы можете поймать исключение, выброшенное при неудачном сопоставлении с образцом. При неудачном сопоставлении с шаблоном нет способа не выдать исключение.