gpt4 book ai didi

Scala 在 Haskell 中的部分函数

转载 作者:行者123 更新时间:2023-12-04 22:18:13 26 4
gpt4 key购买 nike

Scala 对偏函数有很好的支持,主要是因为在 Scala 中,当您定义偏函数时,它还定义了 isDefinedAt为它发挥作用。 Scala 也有 orElseandThen与偏函数一起工作的函数。

Haskell 确实通过简单地非详尽地定义一个函数来支持部分函数(尽管在 Haskell 社区中强烈反对它们)。但是要定义isDefinedAt一般来说,你必须使用某种异常处理,我无法弄清楚。一次isDefinedAt函数被定义然后它可以用来定义orElseandThen函数已经作为 (.) 存在.

总之,我想定义一个函数,

isDefinedAt :: (a -> b) -> a -> Bool
isDefinedAt f x = -- returns True if f is defined at x else False

谁能告诉我如何编写这样的函数。

注意,我可以定义一个带有签名的函数

isDefinedAt :: (a -> b) -> a -> IO Bool

通用 b .但我想要一个没有 IO 在共同域中的功能。

一篇关于 Scala 的偏函数的好文章是 - How to create and use partial functions in Scala By Alvin Alexander

最佳答案

我建议像在 Scala 中一样,为偏函数使用单独的类型。

import Control.Arrow
import Data.Maybe

type Partial = Kleisli Maybe

isDefinedAt :: Partial a b -> a -> Bool
isDefinedAt f x = isJust $ runKleisli f x
-- laziness should save some of the work, if possible

orElse :: Partial a b -> Partial a b -> Partial a b
orElse = (<+>)

andThen :: Partial a b -> Partial b c -> Partial a c
andThen = (>>>)

关于Scala 在 Haskell 中的部分函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com