7

我在一个小项目上运行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。?
4

1 回答 1

15

Arrow 是一个类型类,它(->)是一个实例(参见这里的“实例”,这里是实现)。这意味着您可以直接使用箭头运算符,例如(&&&)函数。

于 2014-03-25T09:33:31.637 回答