如何将部分函数转换为安全(可能)函数?
How to convert partial functions to safe(Maybe) functions?
我希望它更方便地使用库定义的 partialfunc,或者使用部分模式匹配编写回调。
像这样,
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...
使用:纯脚本 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)
这……嗯……非常难看。不是。
'Failed pattern match' 纯脚本抛出异常
所以我认为它应该能够通过纯脚本处理。
做不到?
如果您希望在遗漏案例时例外,请使用 Partial
。如果您不想要,请使用 Maybe
或 Either
或其他合适的求和类型。
您可以捕获模式匹配失败抛出的异常。失败的模式匹配不可能不抛出异常。
我希望它更方便地使用库定义的 partialfunc,或者使用部分模式匹配编写回调。
像这样,
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...
使用:纯脚本 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)
这……嗯……非常难看。不是。
'Failed pattern match' 纯脚本抛出异常
所以我认为它应该能够通过纯脚本处理。
做不到?
如果您希望在遗漏案例时例外,请使用 Partial
。如果您不想要,请使用 Maybe
或 Either
或其他合适的求和类型。
您可以捕获模式匹配失败抛出的异常。失败的模式匹配不可能不抛出异常。