ru_lambda (original) (raw)

nixos + stack [Apr. 23rd, 2020|07:57 pm]Лямбда - функциональное программирование
Хочу собирать и деплоить небольшое хаскельное приложение на NixOS, как сейчас принято это делать?Я попробовал сделать default.nix с with (import { }); haskell.lib.buildStackProject { name = "fbc"; src = ./.; ghc = haskell.compiler.ghc883; buildInputs = [ zlib postgresql ]; }Но кажется, что при каждом nix-build --option sandbox relaxed . эта штука заново выкачивает индекс, все пакеты и билдит их.Посмотрел, как сделано в postgrest, там, как я понял, для сборки под nixos используется то, что сгенерено cabal2nix, а не buildStackProject. Это и есть state of the art?Кроме хаскельного бэкенда, есть ещё фронт, собираемый npm'ом, и хочется иметь одно nix expression, собирающее их оба, поэтому от того, что stack build кэширует пакеты, мало радости.
link post comment
Мы первые в функциональном программировании [Jul. 20th, 2014|09:40 pm]Лямбда - функциональное программирование
Краткое описание функционального языка ГАРФ, придуманного, как утверждают, в 60-е годы боговдохновенным Ильёй Ханаановичем Шмаинымhttps://www.mediafire.com/?h303jm3czojl17xПодарено В.Б.Борщёвым. Не знаю, можно ли что-нибудь понять по этому тексту, вот мы и проверим.Биография Ильи Ханаановичаhttp://people.umass.edu/borschev/Russian/memuar/friends/Shmain.pdfБорщёв также говорит, что некоторые тексты Шмаина были опубликованы в трудах ВИНИТИ "Научно-техническая информация" серия 2, кто хочет, может там поискатьhttp://www2.viniti.ru/index.php?option=com_content&task=category§ionid=4&id=77&Itemid=64На языке ГАРФ я писал диплом в 85-м году, закончив так называемый Московский математический техникум, но сейчас убей не помню, что я там писал.P.S. Нашёл одну из статей Шмаина по ГАРФуhttp://lamb.viniti.ru/sid2/sid2free?sid2=J0611671727Там дана ссылка на предыдущую статью, её надо искать в трудах ВИНИТИ "Научно-техническая информация", серия 2, 1994, номер 3.
link 7 comments|post comment
haskell + vim : хочу переходить по тегам на исходники библиотек [Jan. 8th, 2014|12:45 am]Лямбда - функциональное программирование
Налаживаю себе IDE для хаскеля на базе vim-а и возник такой вопрос. Я использую vim2hs. Переход по тегам (^]), переход в модуль (gf) работает замечательно - но только для моих исходников. А я хочу так же переходить в исходники библиотек, которые ставились через cabal install.Одно решение я нашел, но кривоватое:в шелле:cd ~/tmpcabal unpack нужный_модульvim -- только для создания тегов, можно из него сразу выходитьв vim-е (в котором работаю)cd ~/tmp/нужный_модульпосле этого ^] или gf для символов из этого модуля работаютЭто конечно закат солнца вручную. Может есть более приличный способ?
link 3 comments|post comment
Пакеты программ на haskell под RHEL [May. 3rd, 2013|02:38 am]Лямбда - функциональное программирование
[**Tags**|haskell, linux, rhel, rpm]Всем доброго времени суток!На всякий случай напишу, что готов помочь в сборке пакетов программ на haskell под RHEL 5/6 32/64. Вдруг кому-то будет нужно.Метод подходит только для исполняемых программ, не подходит для библиотек. На выходе получается бинарник, скомпилированный статически со всеми хаскельными библиотеками, упакованный в rpm. В пакете прописаны все необходимые зависимости от разделяемых сишных библиотек.То есть конечному пользователю не нужно знать ничего о хаскеле, не нужно устанавливать никакие хаскельные зависимости.
link post comment
Я не понимаю Type Classes [May. 1st, 2013|11:51 pm]Лямбда - функциональное программирование
[**Tags**|fprog, haskell, incoherent instances, incoherentinstances, type classes]Копая расширяемые записи для Haskell столкнулся с проблемой.мне нужна функция:cast' :: ISubset fs' fs => PlainRec fs -> PlainRec fs'тривиально это будет:cast' = castно компилятор говорит: Could not deduce (PlainRec fs <: PlainRec fs') arising from a use of `cast' from the context (ISubset * fs' fs) Правильно ли я понимаю, что хотя и для конкретных fs и fs' можно с легкостью подобрать экземпляры (из файла), но для случая функции cast' они как-бы общие, и через это оно не компилируется?Можно добавить экземпляр для общего случая и как бы спрятать все эти выведения внутри функций, но правильно ли это, так как если добавить экземпляр для общего случая появляется ошибка с текстом: (The choice depends on the instantiation of fs, fs' To pick the first instance above, use -XIncoherentInstances when compiling the other instance declarations) Это оно мне предлагает изменить библиотеку?Подскажите, пожалуйста, что делают в таких ситуациях.Не понимаю где нужно копать и какой лопатой.Спасибо!UPDATE [Самая-самая] изначальная проблема решилась, то есть потребность в функции cast' отпала. Но все равно хотелось бы услышать мысли по-этому поводу.
link 2 comments|post comment
MskHUG 13/1 [Jan. 7th, 2013|03:36 pm]Лямбда - функциональное программирование
[**Tags**|mskhug]Хочу напомнить, что 10-го января, в 19:00, в конференц-центре на Филипповском (зал 4.11) будет как всегда внеочередное собрание интересующихся программированием на Хаскеле.Докладов будет два, на этот раз - Врадимир Комендантский расскажет про Agda2/Coq в обучении логике и я собираюсь рассказать про насыщение равенствами (это такой простой подход к оптимизации) и смежные вопросы.Как всегда, будут чай, кофе и печеньки.
link 8 comments|post comment
Как дебажить FFI? [Dec. 7th, 2012|02:47 am]Лямбда - функциональное программирование
[**Tags**|ffi, haskell]Пару лет назад написал привязку к библиотеке pam, чтобы можно было по паролю рута или другого системного юзера авторизовываться. Для утилит всяких.Качество кода на уровне "чтоб хоть как-то работало", но есть и приятный момент. Все два года оно работало как надо, без проблем.Без проблем до сегодняшнего дня, когда я решил поюзать эту библиотеку в Centos 5 i686# uname -a Linux centos5-32 2.6.18-308.20.1.el5 #1 SMP Tue Nov 13 10:16:17 EST 2012 i686 athlon i386 GNU/Linux И получил в своём приложении segfault. Как-то так:$ ghci System/Posix/PAM.hs GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. [1 of 3] Compiling System.Posix.PAM.Types ( System/Posix/PAM/Types.hs, interpreted ) [2 of 3] Compiling System.Posix.PAM.LowLevel ( System/Posix/PAM/LowLevel.hs, interpreted ) [3 of 3] Compiling System.Posix.PAM ( System/Posix/PAM.hs, interpreted ) Ok, modules loaded: System.Posix.PAM, System.Posix.PAM.LowLevel, System.Posix.PAM.Types. *System.Posix.PAM> authenticate "test" "sdf" "sdef" Loading package pam-0.1 ... linking ... done. Ошибка сегментирования В более новых системах работает без проблем. В Centos 5 x64 тоже работает. Более того, я тут обнаружил что раньше оно и в Centos 5 i686 работало, пока не начал использовать ghc-7.4.2. Какую точно версию использовал до этого не помню, вроде последние версии 6.Первым делом конечно попробовал сделать всё то же самое на си. Вот так: http://pastebin.com/ETWT6ZNcРаботает. Значит проблема где-то на нашей стороне.Путём нехитрого отладочного вывода нашёл место, где происходит сбой, это c_pam_authenticate.Отсюда вопрос: что делать и кто виноват куда копать дальше?Естественно, среди всего этого marshalling, malloc и free высока вероятность ошибки работы с памятью. Типизация здесь помогает слабо. Отсюда более общий вопрос: как отлаживать такой код и что можно сделать для упрощения поиска ошибок? Вот я перечитал весь код, вроде всё что нужно выделяется и освобождается, вроде сигнатуры все правильные. Как проверить наверняка? После уютненького хаскельного мира, точки взаимодействия с си кажутся очень ненадёжными.Upd: Если кто-то захочет помочь очень сильно, на что я особо не расчитываю, могу дать ssh доступ на ту машину.Upd: Немного локализовал проблему, сбой происходит в момент вызова моего хаскельного колбэка из кода сишной разделяемой библиотеки (libpam/pam_vprompt.c строка 83).
link 20 comments|post comment
Вопросы новичка [Dec. 2nd, 2012|02:15 pm]Лямбда - функциональное программирование
[Tags**|debug, io, Вопрос, вопрос, чайник]Здравствуйте.Начал недавно осваивать Haskell для общего развития и наткнулся на несколько сложностей общего плана. Хотелось бы выслушать советы.1. Мне очень не хватает глобальных переменных. По роду деятельности я занимаюсь моделированием физических процессов и привык к тому, что все параметры определяющие состояние системы у меня доступны из любого места программы (потому что они постоянно и везде нужны). Пока я решил вопрос собрав эти параметры в кортеж, и передавая его одним идентификатором во все необходимые функции. К сожалению, от этого заметно страдает читаемость кода.Нельзя ли как-нибудь на уровне синтаксиса организовать что-то на вроде глобальных переменных (хотя бы read-only)?( Пример кодаCollapse )**2. Диагностический вывод. Мне нужна простая возможность отлавливать попадания программы в недопустимые диапазоны параметров функций. (Приемлемо, если в связке с отладчиком/компилятором)В фортране я мог написать просто STOP "ERROR! Название функции. Причина останова расчета".Но в хаскеле принято отделять IO от вычислений.Я в курсе существования монады Maybe, но думается, что чрезмерное ее употребление по пустякам будет утяжелять код. Есть ли альтернативные решения?
link 67 comments|post comment
Встреча MskHUG. [Nov. 30th, 2012|03:23 pm]Лямбда - функциональное программирование
[**Tags**|haskell, mskhug, встречи]В четверг, 13-го декабря, в 20:00, в конференц-центре на Филипповском можно будет собраться и обсудить Haskell и близко лежащие темы.Зал на 80 человек. Планируется проектор с экраном, доска-тетрадка и чай-кофе с легкими закусками. Я принесу бумаги и карандашей.Я смогу рассказать, как писать быстрые программы и постараюсь уложиться в разумное время наподобие получаса.Если не сложно, напишите мне на sergueyz на gmail.com свои ФИО, если собираетесь придти.PSАлексей Махоткин обещает принести на продажу книжек - переводов TAPL. 1000р/штука.
link 6 comments|post comment
Жемчужины проектирования алгоритмов: функциональный подход [Nov. 28th, 2012|12:17 pm]Лямбда - функциональное программирование
Издательство ДМК Пресс выпустило переведённую мной и ulysses4ever книгу Ричарда Бёрда «Жемчужины проектирования алгоритмов: функциональный подход» (англ. издание). Книгу можно приобрести как в самом издательстве, так и на Озоне.Автор, пользуясь формальными рассуждениями, находит эффективные с алгоритмической точки зрения решения различных задач, выражая их на языке Haskell. Книгу можно порекомендовать всем, кто интересуется функциональным программированием, хотя она вряд ли будет доступна начинающим. Требуется некоторая зрелость в восприятии математических формализмов. Впрочем, если вы уже осилили Изучай Haskell во имя добра!, самое время приступать к Бёрду. Монад здесь, кстати, нет! Точнее говоря, само это слово встречается три раза, но всякий раз в отношении других возможных решений.В общем, несём с базара книги по ФП!
link 28 comments|post comment