我在一个小项目中使用了HLint工具,并且它建议我使用&&&。
例如:
>>> cat st.hs
f = (+) 10
g = (+) 1
main = print $ (\x -> (f x, g x)) 5
>>> hlint st.hs
st.hs:4:17: Warning: Use &&&
Found:
\ x -> (f x, g x)
Why not:
f Control.Arrow.&&& g
1 suggestion
我理解
\x -> (f x, g x)
是一种模式,并感谢您的建议。但是,Control.Arrow.&&&
不能接受普通函数,而是需要箭头函数,所以我无法像建议的那样使用&&&
。那么在这种情况下,推荐的方法是什么?
- 定义自己的
&&&
函数? - 使用箭头函数并执行类似于
(arr f) &&& (arr g)
的操作,但我甚至不知道如何评估它? - 在特定场合忽略Hlint提示?
&&&
,例如((+10) &&& (+1)) 10
,它的结果是(20,11)
。使用&&&
可以同时对给定的参数应用两个不同的函数,并将其结果作为一对元组返回。 - Chris Taylor(->)
是一个二元类型构造器,与Array
等没有任何区别。函数可以像其他任何类型一样使用,成为实例,存储为容器中的数据... 只有一件额外的事情,你可以用它们来对值进行应用,这是其他数据类型无法做到的。 - leftaroundabout