HLint:使用&&&建议建议

mb1*_*b14 7 haskell arrows hlint

我在一个小项目上运行了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
Run Code Online (Sandbox Code Playgroud)

我理解这\x -> (f x, g x)是一种模式,并欣赏这个建议.但是Control.Arrow.&&&没有正常的功能而是箭头,所以我不能&&&按照建议使用.

那么在那种情况下推荐的方式是什么?

  • &&&在函数上定义我自己的运算符?
  • 使用箭头并做一些类似(arr f) &&& (arr g)但我甚至不知道如何评估它?
  • 在那个特殊的场合忽略Hlint.

Tar*_*mil 15

箭是一种类,它的(->)是一个实例(见这里 "实例"下,和这里的实现).这意味着您可以直接使用箭头操作符,例如(&&&)函数.