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

Я понимаю \x -> (f x, g x) это шаблон и ценю предложение. тем не мение Control.Arrow.&&& не принимает нормальные функции, а стрелку, поэтому я не могу просто использовать &&& как предложено.

Так каков рекомендуемый путь в этой ситуации?

  • определить мой собственный &&& оператор на функции?
  • использовать стрелку и сделать что-то вроде (arr f) &&& (arr g) но я даже не знаю, как это оценить?
  • игнорировать Хлинта в этом конкретном случае.

1 ответ

Решение

Стрелка является типом класса, из которого (->) это экземпляр (см. здесь в разделе "Экземпляры", и здесь для реализации). Это означает, что вы можете напрямую использовать операторы стрелок, такие как (&&&) с функциями.

Другие вопросы по тегам