Dmitry
всё остальное в любом языке - просто синтаксический сахар.
Andrey
нет, ну до дна опускаться не будем - иначе лямбда абстракция с аппликацией нашевсе
Andrey
просто я к чему - если трудны монады - пиши без монад, потом по мере постижения можно будет переключиться (и то не на все поначалу)
Влод
это надо большую силу воли иметь. и долго это не продлится
да ну? ну если не брать io который просто в do пишешь и всё ок.
бывает иногда, конечно, используешь монадные функции для maybe или списка тк они уместны, но это не часто происходит. Примерно как list comprehension.
Когда на парсеке пишешь обычно функторы и аппликативные функторы нужны. ну и alternative monoid. до монад редко доходит
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
Влод
Влод
Вроде бы можно hole поставить и посмотреть варианты от ghc
Evgeniy
не видел нигде
Жаль, после скалы тяжко без такого. Хотя вроде бы вполне реализуемые фичи.
Evgeniy
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
Evgeniy
Сергей
Подскажите, как красиво записать конструкцию
[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 ?