← All posts tagged Haskell

segfault
Haskell nixos Вот вы говорите что Haskell это приседания, что его долго изучать, что он сложный. Я на весь Haskell вместе с монадами потратил 2 недели в 2012 еще, а деривейшены на nix-language уже 3 неделю пытаюсь научиться писать, и до сих пор не понимаю как они работают вообще работают. Модный динамический, простой в использовании кудах кукарек.
segfault
nixos butthurt Правильно ли я понял, что пакетник nix делится на две совершенно разные задачи, которые легко отделить друг от друга, а именно

1. Управление деривейшенами, где деривейшен — это либо загрузка иссодников, либо, условно, тройка из:
1.1 Всех инпутов деривейшена, необходимых для сборки, включая библиотеки, заголовочники, бинари, сборочные утилиты (make, gcc, ghc, итд)
1.2 Сборочный скрипт, который находясь в окружении инпутов генерирует аутпуты не важно как
1.3 Список всех аутпутов деривейшена, которые могут быть отдельной зависимостью другого деривейшена, как и сам деривейшен целиком.

Эта задача включает в себя подготовоку окружения для сборки, очистку временных каталогов после сборки, сборку мусора, управление профилями пользователей и т.д. Короче все, чем занимаются nix-build, nix-env, nix-store. Эту задачу можно было бы даже решить на C++ (но не нужно), по крайней мере теперь уже позно что-то менять, ибо оно уже на крестах.

2. Задача генерации этих самых деривейшенов из конфигурации. И вот тут уже отдельный язык мягко говоря не нужен, особенно такой убогий, как ленивый джаваскрипт, коим является по сути nix language. Вот сейчас сборище пакетов nixpkgs представляет из себя нереально сложную программу на nix, которая читает конфигурацию, создает окружения на базе окружений, повторяет логику сборочных утилит для различных языков (сборка пакетов для haskell, ruby, python, qoc, perl ...), содержит СТАНДАРТНУЮ БИБЛИОТЕКУ для работы со списками, хешами и прочими примитивами, которые в нормальных языках давно есть.

В этой программе в почти невозможно разобраться, благодаря динамичности языка, и одновременно отсутствию инструментария, как у взрослых динамических языков. А также наличию конструкци `with`, которая вносит в скоуп все из параметра, значение которого по коду определить невозможно, потому что оно генерируется рекурсивными рекурсиями, которые берут неизвестный инпут, добавляют в него некоторые поля, ожидая от инпута определенного значения, и передают дальше ленивом джаваскрипте. Программа обладает космической цикломатической сложностью, если говорить короче. Разобраться, как она работает дико сложно, я все выходные и понедельник на это убил.

Имеем write only язык, разобраться в программах на котором может только сам автор, и то в течении ограниченного срока после написания. Т.е. какой нибудь пхп, лишп, перл, или жс подошли бы тут не хуже, чем nix language, но у них хотябы инструменты для отладки и тестирования есть а также прости господи IDE, без которой в них никуда.

И вот первая задача решена хорошо, а вторая еле работает. Как они поддерживают nixpkgs? Они реально такие сверхлюди, что могут это писать, и понимать, что они на самом деле делают, или ...? КАК ТАК ТО?
segfault
fail Haskell TFW писал весь день пропозал для генерации линз, начал расписывать чем плохи generic-lens а они оказывается не плохи и ни чего делать не надо.
segfault
code Haskell
Обнаружен древний код на хаскеле, исполнение которого дарует секрет вечной жизни

Prelude> data Data = Data Data
Prelude> let d = Data d
Prelude> show d
segfault
Haskell жиза Не смог заставить квикчек не генерировать гигантского размера данные и взял смоллчек. Я думаю, надо smallcheck брать по дефолту вместо квикчека уже давно.
segfault
? programming Хочу хранить список разно структурированных документов (разные документы могут иметь разную структуру) в некотором текстовом формате так, чтобы это можно было потом редактировать руками и хранить в гите, а главное — мержить. Каждый документ должен храниться как минимум в своей строчке, либо в нескольких строках, чтобы можно было мержить изменения в одних и тех же документах, сделанные в базе в разное время. Какие у нас есть варианты? pretty-printed JSON, YAML ... что ещё? Желательно, чтобы была библиотека работы с этим в Haskell.