Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将布尔函数列表应用于Haskell中的两个参数_Haskell_Monoids - Fatal编程技术网

将布尔函数列表应用于Haskell中的两个参数

将布尔函数列表应用于Haskell中的两个参数,haskell,monoids,Haskell,Monoids,我有一个类型为a->b->Bool的函数列表,我试图将它们应用于两个输入,并将结果与All或Any组合。我使用的是一个变量的函数: mconcat (map (All . ) [(<7),(>7),(==7)]) $ 6 mconcat(map(All.)[(7),(==7)])$6 但我不知道如何用两个变量函数做同样的事情 这项工作: mconcat (map (All . ) (map (uncurry) [(<),(>),(==)])) $ (,) 6 7 m

我有一个类型为
a->b->Bool
的函数列表,我试图将它们应用于两个输入,并将结果与
All
Any
组合。我使用的是一个变量的函数:

mconcat (map (All . ) [(<7),(>7),(==7)]) $ 6
mconcat(map(All.)[(7),(==7)])$6
但我不知道如何用两个变量函数做同样的事情

这项工作:

mconcat (map (All . ) (map (uncurry) [(<),(>),(==)])) $ (,) 6 7
mconcat(map(All.)(map(uncurry)[(),(==)]))$(,)6 7
但在我看来,这是一个丑陋的解决办法


有更好的方法吗?

这是一种自行编写的代码,您只需将类型连接起来即可。但是有两个标准工具(即
Applicative
Traversable
)可以用来缩短代码

在模块生命中
sequenceA::(可遍历的t,应用的f)=>t(fa)->f(ta)
。当专门研究
[]
可遍历的
实例和函数applicative
(>)r
时,我们得到:

sequenceA :: [r -> a] -> r -> [a]
因此,
sequenceA
->
[]
中拉出,将列表中的每个函数应用于一个固定参数

sequenceA [(< 7), (> 7), (== 7)] :: (Num n, Ord n) => n -> [Bool]
-- equivalent to:
\n -> map ($ n) [(< 7), (> 7), (== 7)]

(注意,对于任何正确实现的
Ord
实例,这是一种代码本身编写的类型-您只需将类型连接起来即可。但是,有两个标准工具(即
Applicative
Traversable
)可用于缩短代码

在模块中,
sequenceA::(可遍历的t,应用的f)=>t(fa)->f(ta)
。当专门研究
[]
可遍历的
实例和函数Applicative
(>)r
时,我们得到:

sequenceA :: [r -> a] -> r -> [a]
因此,
sequenceA
->
[]
中拉出,将列表中的每个函数应用于一个固定参数

sequenceA [(< 7), (> 7), (== 7)] :: (Num n, Ord n) => n -> [Bool]
-- equivalent to:
\n -> map ($ n) [(< 7), (> 7), (== 7)]

(注意,对于任何正确实施的
Ord
原始代码的替代方案:

mconcat (map (\f a b -> All (f a b)) [(<),(<=)]) 3 4

与原始代码相近的替代方案:

mconcat (map (\f a b -> All (f a b)) [(<),(<=)]) 3 4