【发布时间】:2014-03-25 09:26:17
【问题描述】:
我在一个小项目上运行 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) -
永远记住 Haskell 中的函数类型并没有什么特别之处。
(->)是一个 2 参数类型的构造函数,与Array没有什么不同。函数可以像任何其他类型一样使用,创建实例,作为数据存储在容器中......只有你可以对它们做的另一件事是其他数据无法做到的,即将它们应用于值。 -
确实,我认为数组组合器比任何其他箭头类型更常用于函数...