如何将部分函数转换为安全(可能)函数?

时间:2017-09-13 03:11:18

标签: purescript

我希望它更方便地使用库定义的partialfunc,或者使用部分模式匹配来编写回调 像这样,

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

我在一些主要的图书馆找不到类似的东西 如何定义?或已在libs中定义?

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 个答案:

答案 0 :(得分:0)

如果您想错过案例,请使用Partial。如果您不想要,请使用MaybeEither或其他适当的和类型。

您可以捕获失败的模式匹配引发的异常。错误的模式匹配无法抛出异常。