我在这里发现了一个类似的问题,询问的几乎是同一件事,但并非完全相同。
我的问题是如何将类型(a-> Bool)的函数列表组合为也是(a-> Bool)的一个函数。
例如
compose :: [(a -> Bool)] -> (a -> Bool)
compose [] = **?**
compose (x:xs) = x **?** compose xs
Run Code Online (Sandbox Code Playgroud)
与此类似的问题是采用三个功能并将它们混合在一起,如下所示:
newFunction x f g y = f x || g x || y x
Run Code Online (Sandbox Code Playgroud)
但这非常有限,因为您必须提供特定数量的函数,并且它不返回另一个函数,而是返回布尔值。我本质上想要一个函数,该函数可以为我提供上面的函数,而没有函数作为参数。
我尝试弄乱Monoids来完成这项工作,但首先遇到了将函数包装到Monoid中的问题,更不用说像newFunction一样将它们组合在一起了。
有没有一种方法可以将相同类型的功能列表(a-> Bool)组成一个相同类型的功能?
我写了一个函数,它将一个函数列表应用于一个项目.
applyAll :: [a -> b] -> a -> [b]
applyAll [] _ = []
applyAll (f:fs) x = (f x) : (applyAll fs x)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?