Вычислительные выражения: 1. Введение
Древнее зло пробудилось.
На хабре вышел перевод первой части цикла по
Тема местами нелёгкая, но рекомендуется к изучению каждому. Даже если не будете писать свои билдеры, полезно внятно представлять, как они устроены внутри.
// Оригинал здесь, на случай если винтажные газогенераторы (типа меня) не узнали статью в гриме.
На хабре вышел перевод первой части цикла по
computation expressions
с F# for Fun and Profit.Тема местами нелёгкая, но рекомендуется к изучению каждому. Даже если не будете писать свои билдеры, полезно внятно представлять, как они устроены внутри.
// Оригинал здесь, на случай если винтажные газогенераторы (типа меня) не узнали статью в гриме.
Хабр
Вычислительные выражения: Введение
Скотт Влащин — безусловный гуру в мире F#, написавший введение в язык , которое рекомендуют новичкам вместо официального руководства . Группа энтузиастов давно (и с переменным успехом) пытается...
Вычислительные выражения: 2. Разбираемся с продолжениями
В этой главе объясняется суть работы
В этой главе объясняется суть работы
let!
, а также do!
, match!
и т.д., но пока без технических деталей.Хабр
Вычислительные выражения: Разбираемся с продолжениями
В предыдущей статье мы увидели, как с помощью вычислительных выражений можно сокращать довольно сложный код. Вот код без вычислительных выражений: let log p = printfn "expression is %A" p let...
Воркшоп «Практические задачи решаем функционально»
Ещё двухчастное видео с dotnext: часть 1 и часть 2.
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать текстовые данные в бинарные и десериализовать их обратно. Задача кажется сложной, потому что языки описания схемы и данных Protobuf — достаточно развитые. Но решается она просто, если пользоваться правильным инструментом. Мы напишем утилиту на языке программирования F#, используя библиотеку FParsec. Научимся по описанию грамматики писать код и тесты для разбора, построим абстрактное синтаксическое дерево и разберёмся, как применять его для сериализации.
Ещё двухчастное видео с dotnext: часть 1 и часть 2.
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать текстовые данные в бинарные и десериализовать их обратно. Задача кажется сложной, потому что языки описания схемы и данных Protobuf — достаточно развитые. Но решается она просто, если пользоваться правильным инструментом. Мы напишем утилиту на языке программирования F#, используя библиотеку FParsec. Научимся по описанию грамматики писать код и тесты для разбора, построим абстрактное синтаксическое дерево и разберёмся, как применять его для сериализации.
YouTube
Марк Шевченко — Воркшоп «Практические задачи решаем функционально» (Часть 1)
Подробнее о конференции DotNext: https://jrg.su/3WmFRE
— —
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать…
— —
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать…
An incursion under C#. Протаскиваем F# в Godot
Вводная статья по связке F# и игрового движка, который на старте активно противится причинению добра. Потребовалось время, чтобы это сопротивление сломить. Данный текст — компиляция опыта по преодолению встреченных препятствий.
До сравнительного анализа F# vs C# vs GDScript дело не дошло. Но если давать оценки без подкрепления следующей статьёй, авансом, то в умелых руках F# хорошо взлетает на Godot, и по мере возрастания сложности начинает обыгрывать конкурентов. Полностью от C#-проекта избавиться не получится, но в перспективе он почти наверняка перестанет быть источником какой-либо информации и превратится в полностью зависимую детерминированную проекцию над Godot и
Вводная статья по связке F# и игрового движка, который на старте активно противится причинению добра. Потребовалось время, чтобы это сопротивление сломить. Данный текст — компиляция опыта по преодолению встреченных препятствий.
До сравнительного анализа F# vs C# vs GDScript дело не дошло. Но если давать оценки без подкрепления следующей статьёй, авансом, то в умелых руках F# хорошо взлетает на Godot, и по мере возрастания сложности начинает обыгрывать конкурентов. Полностью от C#-проекта избавиться не получится, но в перспективе он почти наверняка перестанет быть источником какой-либо информации и превратится в полностью зависимую детерминированную проекцию над Godot и
.fs
-файлами.Хабр
An incursion under C#. Протаскиваем F# в Godot
Вы когда-нибудь бывали на боевом задании? Что вы имеете ввиду? Вторжение под водой с целью взятия крепости, захваченной элитным подразделением, имеющим в своём распоряжении 15 управляемых снарядов с...
Вычислительные выражения: 4. Типы-обёртки
Под типами-обёртками подразумеваются типы, представляющие ядро билдеров, например:
В этой части говорится о связях данных типов с конструкциями
Под типами-обёртками подразумеваются типы, представляющие ядро билдеров, например:
'a option
, 'a Аsync
, Result<'ok, 'error>
и т.д. Их иногда называют M<'a>
в честь того самого слова на букву м
.В этой части говорится о связях данных типов с конструкциями
let!
, return
и return!
.Хабр
Вычислительные выражения: Типы-обёртки
В предыдущем посте мы познакомились с процессом "maybe", благодаря которому можно значительно упросить код, работающий с Option<T> . Типичное использование "maybe" выглядит так: let result =...
Вычислительные выражения: 5. Подробнее про типы-обёртки
В программе:
- Использование дженериков, недженериков и списков в качестве типов-обёрток.
- Правила построения каноничных билдеров.
- Реализация
В программе:
- Использование дженериков, недженериков и списков в качестве типов-обёрток.
- Правила построения каноничных билдеров.
- Реализация
for
.Хабр
Вычислительные выражения: Подробнее про типы-обёртки
В предыдущем посте мы познакомились с концепцией "типов-обёрток" и с тем, как они связаны с вычислительными выражениями. В этом посте мы разберёмся, какие типы можно использовать в качестве обёрток....
Вычислительные выражения: 6. Реализуем Zero и Yield
Полезно знать, как работает
Полезно знать, как работает
let!
, однако в реальности билдеры с этим механизмом характерны для абстракций уровня фреймворка. Для уровня бизнес-логики лучше определять локальные билдеры, которые больше напоминают модифицированные []
или seq {}
. Базой таких билдеров являются методы Zero
и Yield
.Хабр
Вычислительные выражения: Реализуем Zero и Yield
В прошлых статьях цикла мы разобрались со связыванием, функциями-продолжениями и типами-обёртками. Теперь мы, наконец, готовы к знакомству с методами классов-построителей. Обратите внимание, что...
Вычислительные выражения: 7. Реализуем Combine
Метод
Метод
Combine
отвечает за склеивание нескольких yield
. Связка из Zero
, Delay
, Yield
и Combine
даст минимальную полноценную версию списочного билдера.Хабр
Вычислительные выражения: Реализуем Combine
В предыдущем посте мы разбирались в методах Zero и Yield . В этом посте мы рассмотрим возврат из вычислительного выражения нескольких значений с помощью метода Combine . Обратите внимание, что...
Вычислительные выражения: 8. Реализуем Delay и Run
Метод
Метод
Delay
позволит откладывать вычисления, а то и вовсе игнорировать их, если этого требует выражение в билдере. Run
преобразует содержимое билдера во внешний результат на заключительном шаге. В статье он нужен для исполнения отложенных вычислений, которые породил Delay
, но в случае бытовых билдеров Run
часто выполняет роль builder.Build()
из мира ООП.Хабр
Вычислительные выражения: Реализуем Delay и Run
В последних постах мы разобрали основные методы ( Bind , Return , Zero и Combine ), нужные для создания собственного построителя вычислительных выражений. Предыдущий пост рассказывал о методе Combine...
REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Небольшой доклад о пользе F# и REPL даже если ваш прод на C#. К сожалению, качество звука такое, что слушать его в прикуску нет никакой возможности.
Лично я расслышал всё, но если у кого-то возникнут вопросы, то автор доклада присутствует в чате.
Небольшой доклад о пользе F# и REPL даже если ваш прод на C#. К сожалению, качество звука такое, что слушать его в прикуску нет никакой возможности.
Лично я расслышал всё, но если у кого-то возникнут вопросы, то автор доклада присутствует в чате.
YouTube
Генри Ковалевский. REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Генри Ковалевский
Ведущий разработчик, LC Group
REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Многие языки располагают возможностью использования REPL-сессий. В некоторых языках REPL может являться основным инструментом…
Ведущий разработчик, LC Group
REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Многие языки располагают возможностью использования REPL-сессий. В некоторых языках REPL может являться основным инструментом…
Когда имён недостаточно. REST-клиент на F#. Часть 1. DTO
Начало нового слегка хулиганского цикла по бытовому кодогену. В этот раз на примере REST-клиента посмотрим, как можно сводить роль личности к нулю, чтобы бездушная машина могла разгуляться. Тем не менее в первой части самого кодогена нет, но есть много слов про DTO и F# вообще.
Начало нового слегка хулиганского цикла по бытовому кодогену. В этот раз на примере REST-клиента посмотрим, как можно сводить роль личности к нулю, чтобы бездушная машина могла разгуляться. Тем не менее в первой части самого кодогена нет, но есть много слов про DTO и F# вообще.
Хабр
Когда имён недостаточно. REST-клиент на F#. Часть 1. DTO
В данном цикле я хочу поговорить об одном из вариантов представления REST-клиента. Но я буду обсуждать частное (REST), чтобы использовать его как точку опоры для перехода к общему — проблеме проекций...