Dmitry
всё остальное в любом языке - просто синтаксический сахар.
Andrey
нет, ну до дна опускаться не будем - иначе лямбда абстракция с аппликацией нашевсе
Andrey
просто я к чему - если трудны монады - пиши без монад, потом по мере постижения можно будет переключиться (и то не на все поначалу)
Влод
это надо большую силу воли иметь. и долго это не продлится
да ну? ну если не брать io который просто в do пишешь и всё ок. бывает иногда, конечно, используешь монадные функции для maybe или списка тк они уместны, но это не часто происходит. Примерно как list comprehension. Когда на парсеке пишешь обычно функторы и аппликативные функторы нужны. ну и alternative monoid. до монад редко доходит
Евгений
алсо норм было бы если бы io поделили на работу с сетью / работу с бд и тд. была бы монада ui где нельзя делать треды, ходить в бд и тд. наверное это не просто
По-моему суть IO как раз в том, что он всеобъемлющ. Формально это же State над RealWorld. Ничего не мешает тебе скрыть IO внутри твоей UI, но ограничить его интерфейсом общения с X11, например
Misha
Не совсем так. Невозможно иметь только один вид подобного эффекта, возможность сделать тред означает, что можно эмулировать состояние через общение с тредом, имея сеть, можно открывать какие угодно сокеты и эмулировать что угодно вообще и тд
Misha
а, ну я тоже самое и сказал примерно
Евгений
Вообще интересно, но ведь на уровне ОС можно построить иерархию побочных эффектов нормальную, нет?
Quet
смотря что считать "нормальной" иерархией
Влод
В смысле когда делаешь свою ОС? думаю люди не особо двигаются в этом направлении. ну разве что на мобилках приложения просят разные пермишоны. но это скорее уровень предоставляемого сдк, а не ос
Евгений
Ну люди и в направлении использования хаскеля не особо двигаются
Влод
ну я про то что скорей всего такой идеи ни у кого толком не было и пейперов про это не пишут. хаскелем то пользуются
Мерль
[last news] The Haskell Cast Episode 13 – John Wiegley on Categories and Compilers
Евгений
ну я про то что скорей всего такой идеи ни у кого толком не было и пейперов про это не пишут. хаскелем то пользуются
Ну в масштабах человечества, один Элемир не сильно меньше чем все хаскелисты
Misha
а кто знает чего оно возмущается? https://gist.github.com/lolepezy/30820595afd9217083c5ca629e350b55
Misha
Couldn't match type ‘ix1’ with ‘ix’ ‘ix1’ is a rigid type variable bound by the type signature for: genTList :: forall ix1. Proxy (ix : ixs) -> g ix1 -> TList (ix : ixs) g
Misha
то есть ему типа надо что-то знать о ix, чтобы удостовериться, что его можно подставить в g а качестве параметра
Misha
короче, проблему я понял, нужно как-то указать, что ix - это тип из списка ixs, но как ее решить пока не пойму
Alexander
могу вечером посмотреть
Dmitry
Я не настоящий сварщик, но что-то мне подсказывает, что надо Functional Dependencies использовать
Evgeniy
подскажите по тулингу (в emacs или в atom), есть ли где такой функционал?: - выделяем выражение и получаем автодополнение функций оперирующих с его типом и доступных в текущем скоупе (либо показывает от куда их можно импортнуть) - переименовать тип во всем проекте разом -- сходу просто не нашел, хотя и не сильно искал
Anonymous
не видел нигде
Anonymous
((
Anonymous
юзал с хаскелем и emacs, и atom
Влод
В purescript сайд-эффекты так декларируют
Ну да про него наверное и рассказывал. Не мог точно вспомнить откуда это. Алсо ещё бумаги всякие пишут про Eff которые лень читать
Влод
Вроде бы можно hole поставить и посмотреть варианты от ghc
Evgeniy
не видел нигде
Жаль, после скалы тяжко без такого. Хотя вроде бы вполне реализуемые фичи.
Влод
Жаль, после скалы тяжко без такого. Хотя вроде бы вполне реализуемые фичи.
https://wiki.haskell.org/GHC/Typed_holes Хотя ни разу не пользовался, может оно не юзабельно
Evgeniy
https://wiki.haskell.org/GHC/Typed_holes Хотя ни разу не пользовался, может оно не юзабельно
да для некоторых случаев выглядит подходящим, а для простых видимо все hoogle юзают?
Alexander
ну в виме даже плагины были и имакса
Alexander
для рефакторинга HaRe было, но оно неживое было
Alexander
пытались воскресить
Alexey
Как в хаскеллёвом проде поступают с отладочным логирование, всё через IO?
Alexander
Debug.Trace
Alexander
он правда unsafePerformIO . putStrLn
Alexey
И такой unsafePerfomIO не может породить кучу непонятных проблем в дальнейшем?
Alexander
с чего бы?
Alexander
ну и отладочная печать это же про временные штуки, которые не коммитятся?
Boris
Просто иногда он не будет принтить, если функция уже посчитана
Boris
Или не в то время
Alexey
Ладно, логировать зачастую хочется с таймером, а тут опять без IO не обойтись
Alexey
Или опять же логи хочется писать в файлы
Dmitry
А примеры использования есть?
Dmitry
А аналог printf? Т.е. С переменным числом аргументов
Alexey
А часто ли используют подход , что собираешь логи через writer а потом разовое пишешь большой кусок в IO?
Quet
а зачем?
Дима
У меня батчинг используется в модуле, который струячит по паре мегабайт логов в секунду, просто для того, чтобы все не померло, занимаясь выводом в консоль в реалтайме
Alexey
Ну в случае к примеру у тебя есть массивный чистый пайплайн по обсчету данных и ты хочешь посмотреть потом промежуточные результаты. Ну и промежуточные результаты не важны если все упало
Dmitry
@jagajaga Посмотрил примеры, прикольно! Сделайте printf-like вывод! logDebug "Температура %f , а критическая %f" 10.50 100.500
Artyom
а мы formatting всюду используем и поэтому нам printf-like вывод не нужен :troll:
Artyom
(а ещё перейдём на fmt, когда у меня руки дойдут)
Dmitry
Спасибо за formatting
Dmitry
Выглядит неплохо
Alexander
очень не советую использовать hslogger
Alexander
Но если кого-то прут баги в работе сислога и апстрим который по пару лет не принимает патчи, и невозможность разрегистрировать логгеры, то норм либа
Dmitry
А что взамен?
Anatolii
а fast-logger нормальный?
Alexander
katip
Alexander
в нем есть все что в хслоггере и нормальный
Alexander
фаст-логгер тоже норм
Alexander
на самом деле hslogger даже юзабельный
Alexander
но иногда все портит
Evgenii
Grenade: Deep Learning in Haskell (Score: 100+) Link: http://j.mp/2rABDPg
Dmitrii
Жаль, после скалы тяжко без такого. Хотя вроде бы вполне реализуемые фичи.
Такую фичу относительно недавно запилили. Теперь Typed holes могут показывать все функции в скоупе с подходящим типом https://github.com/ghc/ghc/pull/28 Видимо, в GHC 8.2 уже будет влито.
Сергей
Подскажите, как красиво записать конструкцию [a] -> (a -> IO Bool) -> [a (такие, что экшн вернул True)]
Alexander
никак
Alexander
можно [a] -> (a -> IO Bool) -> IO [a]
Alexander
filterM где-то жил
Сергей
Каюсь, да
Сергей
Не перестаю удивляться. Никак не мог понять что нужно выполнять в выражении пока не начал думать о типах.
Andrey
где-то проскакивал неприятный демотиватор про "из собаки выбраться невозможно". каждый раз вспоминаю его, когда кто-то снова хочет выйти чистым из ИО...
Сергей
Мне собственно именно filterM и нужен. Просто вопрос неправильно задал.
Alexander
@s_ivanov я про него поэтому и сказал
Alexander
foo f = fmap (filter fst) . traverse (\x -> (x,) <$> f x)
Alexander
можно так
Сергей
TupleSections нужен
Сергей
только не понимаю зачем собирать пару, и точно fst, а не snd ?