gpt4 book ai didi

haskell - 我可以将模式传递给函数吗?

转载 作者:行者123 更新时间:2023-12-02 11:31:09 24 4
gpt4 key购买 nike

我想要一个像下面这样的函数,这可能吗?事实上,我不知道 Pattern 类型是否存在。

fun1 a :: Pattern a -> a -> Bool
fun1 pattern a = case a of
pattern -> True
_ -> False

最佳答案

我认为这在 Haskell 中是不可能的。

但是,在您的情况下,该模式实际上只是 a -> Bool 类型的函数。因此,不要接受模式,而是接受从 aBool 的任何函数。您的示例相当于在 a 上应用函数 a -> Bool

现在,如果您想做一些更通用的事情,例如能够使用 fun1 正文中的模式中的匹配符号,则无法使用函数来实现。然而,我怀疑 Haskell 根本不可能做到这一点——它需要对类型系统进行奇怪的扩展才能有意义。 Haskell 中的模式匹配根本不是一等公民,因此您不能像那样真正传递模式。

如果你想要这种行为,请查看这本书 Pattern Calculus作者开发并形式化了一种具有比 Haskell 更通用的模式匹配功能的语言。与 Haskell 不同,它使模式成为一等公民。我实际上还没有读完这本书,但我很确定这样的代码正是您能够编写的,等等。

作者围绕他关于模式匹配的想法构建了一种语言,称为 bondi ;它可能也值得一看,特别是如果你不想费心看这本书的话。我不知道它是否适合实际使用,但它确实很有趣。

关于haskell - 我可以将模式传递给函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336687/

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