【问题标题】:HLint : use &&& suggestion adviceHLint : 使用 &&& 建议
【发布时间】: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 没有什么不同。函数可以像任何其他类型一样使用,创建实例,作为数据存储在容器中......只有你可以对它们做的另一件事是其他数据无法做到的,即将它们应用于值。
  • 确实,我认为数组组合器比任何其他箭头类型更常用于函数...

标签: haskell arrows hlint


【解决方案1】:

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

【讨论】:

  • 我没有意识到 (->) 存在。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多