我想要一个像下面这样的功能,这可能吗?事实上,我不知道Pattern是否存在.
fun1 a :: Pattern a -> a -> Bool
fun1 pattern a = case a of
pattern -> True
_ -> False
Run Code Online (Sandbox Code Playgroud)
Tik*_*vis 13
我不认为在Haskell中这是可能的.
但是,在您的情况下,模式实际上只是类型的函数a -> Bool.因此,与其接受的模式,从接受任何功能a来Bool.你的例子相当于在一个函数a -> Bool上应用一个函数a.
现在,如果你想做一些更通用的事情,比如能够使用身体模式中的匹配符号fun1,你就无法用函数来做.但是,我怀疑这对Haskell来说是可能的 - 它需要类型系统的奇怪扩展才有意义.Haskell中的模式匹配根本不是一流的公民,因此你无法真正传递模式.
如果您想要这种行为,请查看作者开发的Pattern Calculus一书,并使用比Haskell更具通用模式匹配功能的语言形式化.与Haskell不同,它使模式成为一流的公民.我还没有完成这本书,但我很确定像这样的代码正是你能写的东西,等等.
作者围绕他关于模式匹配的想法构建了一种语言,称为bondi ; 它可能也值得一试,特别是如果你不想打扰这本书的话.我不知道它是否已经准备好实用,但它确实很有趣.