Alexander
и 50/50 do
Alexander
и жестокий минус в сторону overloading
Vasiliy
а почему минус?
Vasiliy
мне наоборот понравилось
Alexander
у меня в итоге в репле да и так ничерта не работает пока код не абсолютно верный
Vasiliy
вот эти вот T.pack и BS.pack, LBS.pack ненужны
Alexander
и нужно аннотации типов везде добавлять
Alexander
чуть напишешь [1,2,3]
Vasiliy
про аннотации согласен...
Alexander
с этим overloading-ом даже не в toplevel
Alexander
в общем в задачках с курса который в ПОМИ читали меня сильно понапрягало
Alexander
это конечно не серьеное что-то, но все равно
Vasiliy
из того, что не указано, но мне показалось интересным - кастомный синтаксис
Vasiliy
http://idris.readthedocs.io/en/latest/tutorial/syntax.html
Vasiliy
наверное, кто-то сможет замутить вообще какой-нибудь чумовой дсл
Evgeniy
Ребята что вы всё фигнёй маетесь - вон надо под ру поправить либу))https://github.com/facebookincubator/duckling
Vasiliy
ещё есть какой-то elaborator reflection http://docs.idris-lang.org/en/latest/reference/elaborator-reflection.html
Vasiliy
я нихрена не понял, что это такое и как этим пользоваться, но в мэйл-листе, по-моему, читал, что его используют в частности для deriving(Functor)
Vasiliy
то есть можно написать свой класс (интерфейс по-идрисовски) и запилить для него deriving без влезания в сам компилятор
Vasiliy
а, ну и тайп-провайдеры, которые, как мне кажется, не такая уж и крутая фича, но про которые так любят рассказывать байки знакомые F#-прогеры
Vasiliy
вот, мол, я компилю прожку, а компилятор лезет в субд на продакшоне и проверяет, что мой код совместим с текущей версией схемы
Сергей
Есть данные: data Info = Info { optionalField :: Maybe Int , requiredField :: Int } кто знает, есть ли синтаксис чтобы заполнить так: someMakeInfo requiredField = 42 -> Info { optionalField = Nothing, requiredField = 42 }
Сергей
Если создать дефолтную запись и менять поля def { requiredField=43 }, то при таком создании есть возможность случайно не указать обязательных полей. А если создавать с нуля, то нужно перечислять все необязательные = Nothing.
Artyom
сделай обязательные поля строгими и нельзя будет их не заполнить
Artyom
а, нет, я неправильно понял задачу
Mansur
может, сделать инстанс Default, чтобы def ставил опциональные поля в Nothing, и потом def { requiredField = 42 } конечно, в дальнейшем могут быть проблемы с семантикой Default, он, наверное, не для таких целей написан
Alexander
можно сделать defaultInfo если он имеет смысл или уиный конструктор mkInfo куда надо перечислить все поля которые нужны
Vladimir
можно вместо requiredfield передавать функцитю от Info -> Info ?
Зигохистоморфный
http://www.haskellforall.com/2017/06/dhall-is-now-template-engine.html
Anonymous
Гайс, как cabal-dev поставить? При попытке собрать из исходников или просто cabal install cabal-dev вылетает это Resolving dependencies... cabal: Could not resolve dependencies: trying: base-4.9.1.0/installed-4.9... (dependency of cabal-dev-0.9.2) trying: cabal-dev-0.9.2:-no-cabal-dev trying: cabal-dev-0.9.2:-build-tests next goal: process (dependency of cabal-dev-0.9.2) rejecting: process-1.4.3.0/installed-1.4..., process-1.6.0.0, process-1.5.0.0, process-1.4.3.0, process-1.4.2.0, process-1.4.1.0, process-1.4.0.0, process-1.3.0.0, process-1.2.3.0, process-1.2.2.0, process-1.2.1.0, process-1.2.0.0 (conflict: cabal-dev => process>=1.0 && <1.2) rejecting: process-1.1.0.2 (conflict: base==4.9.1.0/installed-4.9..., process => base>=4 && <4.7 || >=3 && <4) trying: process-1.1.0.1 next goal: directory (dependency of process-1.1.0.1) rejecting: directory-1.3.0.0/installed-1.3..., directory-1.3.1.1, directory-1.3.1.0, directory-1.3.0.2, directory-1.3.0.1, directory-1.3.0.0 (conflict: cabal-dev-0.9.2:no-cabal-dev => directory>=1.0 && <1.3) rejecting: directory-1.2.7.1, directory-1.2.7.0, directory-1.2.6.3, directory-1.2.6.2, directory-1.2.5.1, directory-1.2.5.0, directory-1.2.4.0, directory-1.2.3.1, directory-1.2.3.0, directory-1.2.2.1, directory-1.2.2.0, directory-1.2.1.0, directory-1.2.0.1, directory-1.2.0.0 (conflict: process => directory>=1.0 && <1.2) rejecting: directory-1.1.0.2 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.4 && <4.6) rejecting: directory-1.1.0.1 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.2 && <4.5) rejecting: directory-1.1.0.0, directory-1.0.1.2 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.2 && <4.4) rejecting: directory-1.0.1.1, directory-1.0.1.0 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.1 && <4.3) rejecting: directory-1.0.0.3, directory-1.0.0.0 (conflict: base==4.9.1.0/installed-4.9..., directory => base<4.3) rejecting: directory-1.2.6.1 (conflict: process => directory>=1.0 && <1.2) Dependency tree exhaustively searched.
Arseniy
Зачем кабал, если есть стэк?
Aλexander
Я раньше о стеке не слышал, кабал вовсю использовал
Donat
какую библиотеку для postgresql лучше использовать для простого проекта?
Donat
В гугле довольно старые статьи
Arseniy
Зачем стэк, если есть nix...
Dmitrii
Зачем стэк, если есть nix...
Когда будет годный туториал, как поставить nix и использовать его нормально на какой-нибудь убунте, чтобы не иметь проблем и понимать, что происходит (дабы уметь редактировать не только .cabal файлы, но ещё и сгенерированные .nix выражения), тогда, возможно, он станет более популярным ;) А stack лучше тем, что из коробки работает лучше, проще и сразу. Не очень большинству важно, к сожалению, как я понял со временем что технологии хорошии или имеют классную модель. Важно, чтобы работало без особых проблем и можно было сразу начать без геморроя...
Max
Nix пиздец, oče složno
Max
Содомия суицид с nix-shell очень ненужная и ухудшающая UX
Max
Nix для серверов ещё ничего, как замена анзиблу, но на рабочей станции абсолютно лишний
Arseniy
3,5 года на nixos на всех компуктерах Не понимаю, как можно жить на чем то другом
Max
Я вообще не пойму смысла ставить хаскельные зависимости в систему. Удобнее кидать все зависимости в одно место и так дистрибьютить.
Arseniy
Что подразумевается под этим вопрос?
Arseniy
nix-shell используется относительно редко Создал конфигурацию проекта Загрузил nix-shell на конфиг и работаешь
Dmitry
3,5 года на nixos на всех компуктерах Не понимаю, как можно жить на чем то другом
А сервера на nix держите? Стабильно работает? Я вот уже который год смотрю на неё, хочу перейти везде(сервера+рабочие станции), но не решаюсь из-за того что встречаю крайне много противоречивых мнений :)
Arseniy
Держим
Arseniy
Работает
Dmitry
Работает
И прям совсем проблем нет?)
Arseniy
Нет :)
Дима
Видимо, попали в рай)
Arseniy
Ну я активный nixpkgs контрибьютор (раньше так вообще) Плюс с нами другие nixos чуваки работают
Mansur
Гайс, как cabal-dev поставить? При попытке собрать из исходников или просто cabal install cabal-dev вылетает это Resolving dependencies... cabal: Could not resolve dependencies: trying: base-4.9.1.0/installed-4.9... (dependency of cabal-dev-0.9.2) trying: cabal-dev-0.9.2:-no-cabal-dev trying: cabal-dev-0.9.2:-build-tests next goal: process (dependency of cabal-dev-0.9.2) rejecting: process-1.4.3.0/installed-1.4..., process-1.6.0.0, process-1.5.0.0, process-1.4.3.0, process-1.4.2.0, process-1.4.1.0, process-1.4.0.0, process-1.3.0.0, process-1.2.3.0, process-1.2.2.0, process-1.2.1.0, process-1.2.0.0 (conflict: cabal-dev => process>=1.0 && <1.2) rejecting: process-1.1.0.2 (conflict: base==4.9.1.0/installed-4.9..., process => base>=4 && <4.7 || >=3 && <4) trying: process-1.1.0.1 next goal: directory (dependency of process-1.1.0.1) rejecting: directory-1.3.0.0/installed-1.3..., directory-1.3.1.1, directory-1.3.1.0, directory-1.3.0.2, directory-1.3.0.1, directory-1.3.0.0 (conflict: cabal-dev-0.9.2:no-cabal-dev => directory>=1.0 && <1.3) rejecting: directory-1.2.7.1, directory-1.2.7.0, directory-1.2.6.3, directory-1.2.6.2, directory-1.2.5.1, directory-1.2.5.0, directory-1.2.4.0, directory-1.2.3.1, directory-1.2.3.0, directory-1.2.2.1, directory-1.2.2.0, directory-1.2.1.0, directory-1.2.0.1, directory-1.2.0.0 (conflict: process => directory>=1.0 && <1.2) rejecting: directory-1.1.0.2 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.4 && <4.6) rejecting: directory-1.1.0.1 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.2 && <4.5) rejecting: directory-1.1.0.0, directory-1.0.1.2 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.2 && <4.4) rejecting: directory-1.0.1.1, directory-1.0.1.0 (conflict: base==4.9.1.0/installed-4.9..., directory => base>=4.1 && <4.3) rejecting: directory-1.0.0.3, directory-1.0.0.0 (conflict: base==4.9.1.0/installed-4.9..., directory => base<4.3) rejecting: directory-1.2.6.1 (conflict: process => directory>=1.0 && <1.2) Dependency tree exhaustively searched.
Вместо него cabal sandbox же. Или оно что-то больше умеет?
Anonymous
Я хрен его знает, только сегодня захотел на хаскеле хотя бы хэлоу ворлд сделать, погуглил, первой ссылочкой шла статья с хабра, там рекомендовали cabal-dev юзать. Потом естественно стак попробовал т.к. кабал не ставился
Alexander
cabal-dev не нужен с тех пор сендбоксы в cabal-install завезли
Alexey
Други, есть вопрос. На выходных покопал сервант и возник такой вопрос: а как передать в модуль зависимости или настройки. Допустим мне в контексте каждой функции модуля нужно свойство. Я хочу задавать его в одном месте, а использовать в другом. Такой подход облегчает тестирование и разработку. Как вы решаете это тут?
Евгений
Нет :)
Я тоже самое рассказываю всем коллегам про генту. А потом удивляюсь, что мир после месяца необновлений собрался без проблем
Alexey
kajdayaFunktsia::MonadReader m Svoistvo => X -> m Y
ну так можно, да, но это нехило так добавляет бойлерплейта.
Alexey
можно и явно параметром передавать
Alexey
есть ли какие-то операции над модулями? типа взял модуль и вернул такой же только добавил в него функцию или чтото в этом духе?
Oleg
ну так можно, да, но это нехило так добавляет бойлерплейта.
type AllNeededShit m = (MHRElemsConstraint m [Svoistvo1, Svoistvo2], MonadWriter m Log, MonadError m Kosyak) kajdayaFunkciya::AllNeededShit m=>X -> m Y
Alexey
норм. попробую
Alexey
И еще момент - можно сделать так чтобы stack ghci автоматически при изменении файлов обновлялся? Без явного :r?
Alexey
что не так с этим желанием?
Oleg
Какой-то ад
Евгений
И еще момент - можно сделать так чтобы stack ghci автоматически при изменении файлов обновлялся? Без явного :r?
soviet_engineering_solution: напиши скрипт, который будет слушать inotify на файлах и посылать в input stack ghci :r при изменениях
Donat
https://github.com/reiddraper/ordeal (не пробовал)
Евгений
Это обёртка над стеком? o.o
Vladimir
Ghcid же есть для этого
Alexander
ghcid уже называли?
Alexander
а .. называли
Anatolii
да вот иногда хочется именно ghci - чтобы потом что-то поделать внутри
Anatolii
если бы в ghcid какой-то режим добавили чтобы можно было поработать в нем
Alexander
ясно
Евгений
А почему удивляешься?
Например вот поэтому: >>> Unpacking ./rustc-beta-src.tar.gz to /var/tmp/portage/dev-lang/rust-99/work /usr/bin/python2.7: can't open file '/var/tmp/portage/dev-lang/rust-99/work/rustc-beta/src/etc/get-stage0.py': [Errno 2] No such file or directory * ERROR: dev-lang/rust-99::rust failed (unpack phase): * (no error message) * * Call stack: * ebuild.sh, line 115: Called src_unpack * environment, line 3142: Called die * The specific snippet of code: * export CFG_SRC_DIR="${S}" && cd ${S} && mkdir -p "${S}/dl" && mkdir -p "${S}/${BUILD_TRIPLE}/stage0/bin" && python2 "${S}/src/etc/get-stage0.py" ${BUILD_TRIPLE} || die * * If you need support, post the output of `emerge --info '=dev-lang/rust-99::rust'`, * the complete build log and the output of `emerge -pqv '=dev-lang/rust-99::rust'`. * The complete build log is located at '/var/tmp/portage/dev-lang/rust-99/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/dev-lang/rust-99/temp/environment'. * Working directory: '/var/tmp/portage/dev-lang/rust-99/work/rustc-beta' * S: '/var/tmp/portage/dev-lang/rust-99/work/rustc-beta'