Nano Hash - криптовалюты, майнинг, программирование

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), но я даже не знаю, как это оценить?
  • игнорировать Хлинта в этом конкретном случае.?
25.03.2014

  • Вы можете использовать &&& с функциями, как в ((+10) &&& (+1)) 10, что оценивается как (20,11) 25.03.2014
  • Всегда помните, что в типах функций в Haskell нет ничего особенного. (->) — это конструктор типа с двумя аргументами, ничем не отличающийся, скажем, от Array. Функции можно использовать как любой другой тип, создавать их экземпляры, хранить как данные в контейнерах... только есть одна дополнительная вещь, которую вы можете делать с ними, что невозможно с другими данными, а именно применять их к значениям. 25.03.2014
  • Действительно, я думаю, что комбинаторы массивов гораздо чаще используются с функциями, чем с любым другим типом стрелок... 25.03.2014

Ответы:


1

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

25.03.2014
  • Я не знал, что (-›) существует. Большое тебе спасибо 25.03.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..