🔥 Rainbow Brackets — плагин для IDE, основанных на IntelliJ IDEA, который раскрашивает любые скобки
Поддерживаемые языки: Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby, Elixir, ObjectiveC, PHP, C#, HTML, XML, SQL, Apex language.
Поддерживаемые языки: Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby, Elixir, ObjectiveC, PHP, C#, HTML, XML, SQL, Apex language.
Книга создана с помощью практичного Markdown, блистательного Materialize, впечатляющего Hakyll, элегантного Clay, гибкого BlazeHtml и мощного pandoc.
И разумеется, всё это связано воедино силою Haskell. Книга написана при поддержке русскоязычного сообщества Haskell-разработчиков.
Haskel
Please open Telegram to view this post
VIEW IN TELEGRAM
📕 Effective Haskell: Solving Real-World Problems with Strongly Typed Functional Programming
Автор: Rebecca Skinner (2023)
Используйте мощь языка Haskell в своих программах. Используйте такие мощные возможности, как преобразования монад и семейства типов, для создания полезных приложений.
Реализуйте преимущества чисто функционального языка, например, защитите свой код от побочных эффектов.
Безбоязненно управляйте параллельными процессами. Применяйте функциональные методы для работы с базами данных и построения RESTful-сервисов.
Книга поможет не увязнуть в теории, а научиться применять передовые концепции программирования для решения реальных задач.
📌 Книга
@haskell_tg - книги, курсы, гайды и уроки
Автор: Rebecca Skinner (2023)
Используйте мощь языка Haskell в своих программах. Используйте такие мощные возможности, как преобразования монад и семейства типов, для создания полезных приложений.
Реализуйте преимущества чисто функционального языка, например, защитите свой код от побочных эффектов.
Безбоязненно управляйте параллельными процессами. Применяйте функциональные методы для работы с базами данных и построения RESTful-сервисов.
Книга поможет не увязнуть в теории, а научиться применять передовые концепции программирования для решения реальных задач.
📌 Книга
@haskell_tg - книги, курсы, гайды и уроки
Авторы: Paul Hudak, Donya Quick
📕 Книга
@haskell_tg - книги, курсы, гайды и уроки
Please open Telegram to view this post
VIEW IN TELEGRAM
Haskell Еженедельный новостной дайджест
Haskell 449 http://haskellweekly.news/issue/449.html
@haskell_tg
Haskell 449 http://haskellweekly.news/issue/449.html
@haskell_tg
Библиотека предоставляет удобный API для запуска Docker-контейнеров и позволяет разработчикам программно определять контейнеры, которые следует запускать как часть теста, и очищать эти ресурсы после завершения теста. На текущий момент поддерживается в Haskell, Java, Go, .NET, Python, Node.js, Rust.
https://www.testcontainers.org/
@haskell_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
Этот ресурс создан, чтобы предложить вам тестовые задания для изучения Haskell на пркатике.
⚡️ Программа обучения полностью открыта и доступна бесплатно для всех.
Всего заданий пять, и они достаточно объёмные.
🕘 Даже при интенсивном темпе прохождения курса потребуется примерно 5 месяцев.
Задания нацелены на систематическое освоение основ и принципов Haskell разработки.
Одной из самых грубых ошибок при обучении является стремление сразу погрузиться в сложные практические задачи и начать осваивать множество высокоуровневых технологий (таких как веб-фреймворки), требующих значительного времени на изучение документации. Но без прочного фундамента лучше не углубляться в подобные темы 😊
Поэтому вы начнете с основ: изучение самого языка, ключевых шаблонов проектирования и архитектурных принципов. После этого перейдете к самым простым технологиям ( веб-серверам, примитивным обёрткам для работы с базами данных и т.п.).
Завершающим этапом становится масштабная переработка кода на основе множества различных источников и анализ ваших GitHub-репозиториев с созданием issue-заданий.
🌟 Кроме того, авторы поддерживают подход, согласно которому новичкам не следует сразу включаться в реальные проекты до тех пор, пока они не выполнят несколько своих собственных проектов размером хотя бы на 2–3 тысячи строк кода.
Погружаясь слишком рано в реальный проект, существует высокий риск потеряться в сложном и незнакомом коде, утратить мотивацию, а самое важное — приобрести фрагментарный и бессистемный опыт, поскольку задачи будут крайне специфическими, а процесс обучения — неравномерным.
В результате, даже если стажёр сохранит свою мотивацию, его знания окажутся менее глубокими, чем у коллеги, который начал с нуля и последовательно выполнил несколько самостоятельных проектов.
Эта стажировка должна стать отличным опытом для вас!
@haskell_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Часто задаваемые вопросы по работе с Haskell
https://www.haskellforall.com/2024/11/the-haskell-inlining-and-specialization.html
Haskel
https://www.haskellforall.com/2024/11/the-haskell-inlining-and-specialization.html
Haskel
Haskellforall
The Haskell inlining and specialization FAQ
The Haskell inlining and specialization FAQ This is a post is an FAQ answering the most common questions peo...
Добро пожаловать в мир функционального программирования, строгой типизации, чистых функций, ленивых вычислений и классов типов.
Всё это вы найдёте в замечательном языке программирования Haskell.
Если вы просто где-то слышали о Haskell, и пока это описание ни о чём не говорит, ничего, об этом и о многом другом вы узнаете со страниц этой книги.
Haskell был основан на исходе восьмидесятых, как общий язык для программистов, интересующихся функциональным программированием и ленивой стратегией вычислений.
Это свободный язык, он разрабатывается комитетом разработчиков, программистов, математиков, информатиков, и просто увлечённых программированием людей. Основной компилятор языка GHC разрабатывается в Microsoft Research, но несмотря на это легко доступен в интернет. Вы можете установить его через Haskell Platform (для начинающих) или напрямую с сайта GHC (для гиков и любителей квестов). Ещё нам понадобится редактор с подсветкой синтаксиса Haskell.
Подойдёт простой gedit или более тяжёлые vim и Emacs. Есть и IDE для Haskell. Это Leksah, но пока ещё она совсем юная.
Итак, устанавливаем компилятор GHC подбираем редактор по вкусу и в добрый путь!
📚 Учебник
@haskell_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
Они "одинаковые"? кто решит тот лучший 💪
Для двух массивов
Examples:
Допустимые массивы
Некорректные массивы
Если, например, мы изменим первое число на что-то другое,
Примечания
#6kyu
🔗 Перейти к задаче
@haskell_tg
Для двух массивов
a
и b
напишите функцию comp(a, b)
(или compSame(a, b)
), которая проверяет, есть ли в этих массивах "одинаковые" элементы с одинаковой кратностью (кратность члена - это количество раз, которое он встречается). В данном случае "одинаковые" означает, что элементы в b
- это элементы в квадрате a
, независимо от порядка.Examples:
Допустимые массивы
a = [121, 144, 19, 161, 19, 144, 19, 11] b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
comp(a, b)
возвращает true, потому что в b
121 - квадрат 11, 14641 - квадрат 121, 20736 - квадрат 144, 361 - квадрат 19, 25921 - квадрат 161, и так далее. Это становится очевидным, если записать элементы b
в терминах квадратов:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]
Некорректные массивы
Если, например, мы изменим первое число на что-то другое,
comp
больше не будет возвращать true:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
comp(a,b)
возвращает false, потому что в b
132 не является квадратом какого-либо числа из a
.
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]
comp(a,b)
возвращает false, потому что в b
36100 не является квадратом какого-либо числа из a
.Примечания
🟡a
или b
могут быть []
или {}
(все языки, кроме R, Shell).
🟡a
или b
могут быть nil
или null
или None
или nothing
(кроме C++, COBOL, Crystal, D, Dart, Elixir, Fortran, F#, Haskell, Nim, OCaml, Pascal, Perl, PowerShell, Prolog, PureScript, R, Racket, Rust, Shell, Swift). 🟡
Если a
или b
равны nil
(или null
, или None
, в зависимости от языка), проблема не имеет смысла, поэтому возвращается false.#6kyu
🔗 Перейти к задаче
@haskell_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ PostgREST создает полноценное RESTful API на основе любой существующей базы данных PostgreSQL.
**Производительность:**
Скорость работы обеспечивается за счет трех факторов. Во-первых, сервер написан на Haskell с использованием HTTP Warp (это компилируемый язык с легковесными потоками). Во-вторых, он передает максимальное количество вычислений базе данных, включая:
- Сериализацию ответов JSON прямо в SQL,
- Валидацию данных,
- Механизмы авторизации,
- Комбинированный подсчет строк и фильтрацию,
- Возврат всех данных одной командой (*).
И наконец, PostgREST эффективно взаимодействует с базой данных через библиотеку Hasql:
- Поддерживает пул соединений с базой данных,
- Использует бинарный протокол PostgreSQL,
- Работает без сохранения состояния, что позволяет легко масштабироваться горизонтально.
▪ Github
@haskell_tg
**Производительность:**
Скорость работы обеспечивается за счет трех факторов. Во-первых, сервер написан на Haskell с использованием HTTP Warp (это компилируемый язык с легковесными потоками). Во-вторых, он передает максимальное количество вычислений базе данных, включая:
- Сериализацию ответов JSON прямо в SQL,
- Валидацию данных,
- Механизмы авторизации,
- Комбинированный подсчет строк и фильтрацию,
- Возврат всех данных одной командой (*).
И наконец, PostgREST эффективно взаимодействует с базой данных через библиотеку Hasql:
- Поддерживает пул соединений с базой данных,
- Использует бинарный протокол PostgreSQL,
- Работает без сохранения состояния, что позволяет легко масштабироваться горизонтально.
▪ Github
@haskell_tg
Media is too big
VIEW IN TELEGRAM
🚀 Виталий Брагилевский: интервью с автором Haskell in Depth
https://www.youtube.com/watch?v=F4hXp0-vgPY&pp=ygUGaGFza2Vs
Haskel
https://www.youtube.com/watch?v=F4hXp0-vgPY&pp=ygUGaGFza2Vs
Haskel
Программируй_на_Haskell_2019_Уилл_Курт.pdf
18.1 MB
Программируй на Haskell [2019] Уилл Курт
Языки программирования зачастую отличаются лишь отдельными элементами - несколько ключевых слов, библиотек или платформенных решений. Haskell формирует абсолютно новую точку зрения. По мнению пионера программного обеспечения Алана Кэя, смена перспективы может дать 80 баллов IQ, и разработчики на Haskell соглашаются с исключительными преимуществами мышления в стиле Haskell: функционального мышления с ориентацией на типобезопасность, математическую определённость и многое другое. В этой практической книге вы будете учиться именно этому. «Программируй на Haskell» проведёт вас через короткие уроки, примеры и упражнения, разработанные так, чтобы вы смогли прочувствовать Haskell. В ней вы найдёте кристально ясные иллюстрации и легко сможете практиковаться под её руководством. Вы будете писать и тестировать дюжины интересных программ, а также погрузитесь в различные модули и библиотеки.
Haskell - книги, курсы, гайды и уроки
Языки программирования зачастую отличаются лишь отдельными элементами - несколько ключевых слов, библиотек или платформенных решений. Haskell формирует абсолютно новую точку зрения. По мнению пионера программного обеспечения Алана Кэя, смена перспективы может дать 80 баллов IQ, и разработчики на Haskell соглашаются с исключительными преимуществами мышления в стиле Haskell: функционального мышления с ориентацией на типобезопасность, математическую определённость и многое другое. В этой практической книге вы будете учиться именно этому. «Программируй на Haskell» проведёт вас через короткие уроки, примеры и упражнения, разработанные так, чтобы вы смогли прочувствовать Haskell. В ней вы найдёте кристально ясные иллюстрации и легко сможете практиковаться под её руководством. Вы будете писать и тестировать дюжины интересных программ, а также погрузитесь в различные модули и библиотеки.
Haskell - книги, курсы, гайды и уроки
Haskell
Please open Telegram to view this post
VIEW IN TELEGRAM
@haskell_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ winasyncsocket: Truly asynchronous socket I/O on Windows
По-настоящему асинхронный TCP/IP на Haskell/Windows!
🖥 Github
@haskell_tg
По-настоящему асинхронный TCP/IP на Haskell/Windows!
@haskell_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
«Large Lambda Model» крутой гайд, где автор делится опытом реализации инференса модели GPT-2 на языке Haskell с использованием библиотеки hmatrix и OpenBLAS.
Основная цель проекта — выполнить прямой проход (forward pass) модели без обучения или обратного распространения ошибки.
Этот проект демонстрирует, как можно реализовать инференс модели GPT-2 на Haskell, углубляясь в детали архитектуры и работы с линейной алгеброй без использования специализированных тензорных библиотек.
Выбор инструментов:
Haskell и hmatrix: Использование Haskell с hmatrix для линейной алгебры.
OpenBLAS: Применение для оптимизации линейных операций.
Архитектура GPT-2:
Ресурсы для изучения:
- Репозитории Karpathy: NanoGPT и llm.c.
Визуализатор LLM от Brendan Bycroft.
Веб-приложение для токенизации: tiktokenizer.
▪ Читать
@haskell_tg
Основная цель проекта — выполнить прямой проход (forward pass) модели без обучения или обратного распространения ошибки.
Этот проект демонстрирует, как можно реализовать инференс модели GPT-2 на Haskell, углубляясь в детали архитектуры и работы с линейной алгеброй без использования специализированных тензорных библиотек.
Выбор инструментов:
Haskell и hmatrix: Использование Haskell с hmatrix для линейной алгебры.
OpenBLAS: Применение для оптимизации линейных операций.
Архитектура GPT-2:
Ресурсы для изучения:
- Репозитории Karpathy: NanoGPT и llm.c.
Визуализатор LLM от Brendan Bycroft.
Веб-приложение для токенизации: tiktokenizer.
▪ Читать
@haskell_tg
⚡️ Google представил OSV-Scanner v2
Новая версия OSV-Scanner значительно расширяет возможности для разработчиков:
• Теперь сканируются проекты на .NET, Python, Java, JS, Go, Haskell — включая такие форматы, как deps.json, uv.lock, bun.lock, Uber Jars и др.
• Сводка по уязвимостям с фильтрами по критичности, пакетам, слоям в виде интерактивного HTML-отчёта
• Если вы используете Java с Maven, инструмент подскажет, как безопасно обновить уязвимые зависимости с минимальными рисками.
• Анализ образов Debian, Ubuntu и Alpine с определением уязвимых пакетов, историей слоев, идентификацией базового образа и фильтрацией ложных срабатываний
📌 Релиз
Новая версия OSV-Scanner значительно расширяет возможности для разработчиков:
• Теперь сканируются проекты на .NET, Python, Java, JS, Go, Haskell — включая такие форматы, как deps.json, uv.lock, bun.lock, Uber Jars и др.
• Сводка по уязвимостям с фильтрами по критичности, пакетам, слоям в виде интерактивного HTML-отчёта
• Если вы используете Java с Maven, инструмент подскажет, как безопасно обновить уязвимые зависимости с минимальными рисками.
• Анализ образов Debian, Ubuntu и Alpine с определением уязвимых пакетов, историей слоев, идентификацией базового образа и фильтрацией ложных срабатываний
📌 Релиз
GitHub
Releases · google/osv-scanner
Vulnerability scanner written in Go which uses the data provided by https://osv.dev - google/osv-scanner
⚡️ Перенос рекомендаций песен на Haskell
В статье рассказывается о переводе кода на F# в Haskell для задачи рекомендаций песен. Это часть серии о работе с разными языками программирования и функциональной архитектурой.
@haskell_tg
В статье рассказывается о переводе кода на F# в Haskell для задачи рекомендаций песен. Это часть серии о работе с разными языками программирования и функциональной архитектурой.
@haskell_tg
blog.ploeh.dk
Porting song recommendations to Haskell
An F# code base translated to Haskell.
# 🧠 Haskell-задача с подвохом: “print vs lazy evaluation”
📘 Условие
Посмотри на следующий код:
❓ Вопрос:
1) Что напечатает эта программа?
2) Почему
3) Как заставить
---
✅ Подвох: ленивость вычислений
Haskell по умолчанию не выполняет вычисления, если результат не используется.
В результате,
---
✅ Пример вывода:
Хоть в
---
✅ Правильный способ — форсировать вычисление:
```haskell
import Debug.Trace
import Control.DeepSeq
main :: IO ()
main = do
let xs = [1..5]
let ys = map (\x -> traceShow x (x * 2)) xs
ys `deepseq` print ys
```
Теперь `traceShow` сработает **для каждого элемента**, потому что `deepseq` заставит Haskell **полностью вычислить список** перед `print`.
---
⚠️ Подвох
• `map` не вызывает функцию сразу — только когда элемент реально нужен
• `print` может не форсировать весь список
• Это вызывает недоумение у тех, кто ожидает «ленивость только в `IO`»
🎯 Отличная задача, чтобы проверить знание ленивости и управления побочными эффектами в Haskell.
📘 Условие
Посмотри на следующий код:
main :: IO ()
main = do
let xs = [1..5]
print (map (\x -> traceShow x (x * 2)) xs)
❓ Вопрос:
1) Что напечатает эта программа?
2) Почему
traceShow
не ведёт себя так, как ожидается? 3) Как заставить
traceShow
сработать для каждого элемента?---
✅ Подвох: ленивость вычислений
Haskell по умолчанию не выполняет вычисления, если результат не используется.
map
просто создаёт ленивое представление списка. print
вызывает show
, но show
на списках вызывает show
только на нужных элементах при необходимости.В результате,
traceShow
может сработать один раз или вообще не выполниться, если не происходит полного прохода по списку.---
✅ Пример вывода:
1
[2,4,6,8,10]
Хоть в
map
был traceShow
, только первый элемент срабатывает (или вообще никто — в зависимости от версии).---
✅ Правильный способ — форсировать вычисление:
```haskell
import Debug.Trace
import Control.DeepSeq
main :: IO ()
main = do
let xs = [1..5]
let ys = map (\x -> traceShow x (x * 2)) xs
ys `deepseq` print ys
```
Теперь `traceShow` сработает **для каждого элемента**, потому что `deepseq` заставит Haskell **полностью вычислить список** перед `print`.
---
⚠️ Подвох
• `map` не вызывает функцию сразу — только когда элемент реально нужен
• `print` может не форсировать весь список
• Это вызывает недоумение у тех, кто ожидает «ленивость только в `IO`»
🎯 Отличная задача, чтобы проверить знание ленивости и управления побочными эффектами в Haskell.