⚡️ 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.