Nix і haskell перша зустріч

Ок, як ви вже зрозуміли, ніякої установки не було, просто з'явилися нові символічні посилання в моєму профілі.

Повертаємося до проекту. Проходжу діалог з cabal init. все як завжди, в результаті чого отримую найпростіший проектик:

Ніяких залежностей, крім як від base. ніякої корисної роботи, крім виведення рядка "hello". Все стандартно і примітивно.

Nix-іфікація

А ось тепер починається найцікавіше. Давайте зробимо нашу програму Nix-пакетом. Але спочатку необхідно визначитися з поняттями.

Коли ми говоримо про Nix-пакетах, це аж ніяк не те ж саме, що, наприклад, deb -пакети. Як ви вже пам'ятаєте, в основі Nix лежить чисто-функціональних підхід до управління пакетами. Але що ще важливо, Nix - це і особлива мова програмування! І коли ми говоримо про створення Nix-пакета, ми насправді маємо на увазі написання маленької програмки на мові Nix. Результатом виконання цієї маленької програмки і буде наш пакет! Це приблизно як в Hakyll. щоб побудувати статичний сайт, потрібно написати програму на Haskell, результатом виконання якої і буде наш сайт.

Та найменша програма на мові Nix, на основі якої буде побудований наш майбутній пакет, повинна зберігатися в файлі default.nix. Строго кажучи, ім'я файлу може бути і іншим, але за замовчуванням очікується саме таке ім'я.

Ок, але як же ми її напишемо? Так ось так і напишемо:

Поки просто скопіюйте це вміст в файл default.nix. Я спеціально не стану розповідати вам про вміст цього файлу, тому що це питання заслуговує однієї з майбутніх статей. Лише зверніть увагу на команду cabal2nix. ось для чого потрібна була установка cabal2nix. про яку згадано раніше.

Тепер, коли у нас є програма на мові Nix, нам потрібно її зібрати і запустити. Але оскільки Nix не є компільовані мовою, нам слід лише передати її на вхід команди nix-build - і робота буде зроблена. Робиться це так:

Зверніть увагу, що ім'я .nix файлу не передається команді явно. Ось чому потрібно було назвати його default.nix. команда nix-build шукає в поточному каталозі файл саме з таким ім'ям.

Ви запитаєте, а навіщо потрібен --dry-run. Це - холостий прогін, нічого насправді не будує, а лише показує, що відбудеться під час будівництва. І ось що він нам покаже:

Те, що нам і потрібно! Коли ми запустимо цю команду по-справжньому, наш проектик стане частиною / nix / store /. як і всі інші пакети! Зробімо цю справу:

Збірка завершиться, а останнім рядком буде ось що: