
Dmitry
24.05.2017
12:22:31
ну по приведенной фотке не вполне очевидно что где не сходится, но да - добавить конверсию

Misha
24.05.2017
12:22:52
но вообще да
"на практике"

Google

Kit
24.05.2017
12:53:47

Aragaer
24.05.2017
13:07:04
конструкция-то простецкая, но куда и зачем - так и не осилил

Dmitry
24.05.2017
13:07:38
что бы типизировать эффекты же.

Aragaer
24.05.2017
13:08:11
вот ... не, я не понял, что такое "типизировать" и какие такие "эффекты". Еще пока
мне по-простому - функции, байтики, маллок

Dmitry
24.05.2017
13:08:55
ну вот тем, кто делал хаскель, захотелось чистый язык. классификация языков есть, например, у Аппеля и она вообще возникает каждый раз, когда дело доходит до разработки языков
и если у тебя
readIntFromFile :: FIlePath -> IO Int
то с этим
Int
, который внутри
IO
надо как-то жить

Мерлин
24.05.2017
13:09:58

Dmitry
24.05.2017
13:10:18
у Аппеля, например, тоже самое делается без монад, но в итоге получаются всё равно практически монады

Aragaer
24.05.2017
13:11:38
вобщем в том (единственном) случае, когда я попытался что-то написать на хаскелле, я дошел до того, что мне понадобились монады, за один вечер не сообразил как их прицепить, а потом (уже несколько лет) к тому единственному случаю не возвращался

Мерлин
24.05.2017
13:12:27

Dmitry
24.05.2017
13:14:44
тащем-та, пописав в CPS хотя бы на Си, непонятно, какие проблемы с монадами самими по себе

Google

Dmitry
24.05.2017
13:14:51
монада это ... тадам! всего лишь тайпкласс.

Misha
24.05.2017
13:15:26
ну вот да

Dmitry
24.05.2017
13:15:37
с интерфейсами ж в Java нет проблем, а тут-то что вы к ним прицепились?

Evgeniy
24.05.2017
13:16:37
мне по-простому - функции, байтики, маллок
проблема с этим всем в том, что много всякой теории и кучи разных описаний с разных сторон и наиболее простой способ разобраться это просто не вникать особо а попробовать использовать

Dmitry
24.05.2017
13:16:53
зато я помню, как мне надо было в Си сказать компилятору, что у меня вычисление без побочных эффектов и заставить его в компайл-тайме свитч вычислить
шо вы думаете - так и не получилось

Misha
24.05.2017
13:17:08
далеко не самая сложная абстракция, но почему-то у людей какое-то благоговение при слове монада

Dmitry
24.05.2017
13:17:15
потому что откуда знать в тупом си, что функция без побочных эффектов
ну вот да. с одной строны, взможно из-за названия - отдает то ли Гегелем, то ли Хайдеггером
вот люди и боятся. в F# их вроде переименовали во что-то. но не помогло

? animufag ?
24.05.2017
13:21:42
алсо норм было бы если бы io поделили на работу с сетью / работу с бд и тд. была бы монада ui где нельзя делать треды, ходить в бд и тд. наверное это не просто

Aragaer
24.05.2017
13:23:47

Evgeniy
24.05.2017
13:23:57

Dmitry
24.05.2017
13:23:57
1) не всегда работает
2) это был не gcc
ну и все эти pure совершенно точно работают не всегда, т.е там какие-то эвристики и гарантировать ничего нельзя.

Евгений
24.05.2017
13:37:07

Андрей
24.05.2017
13:43:53
>дошел до того, что мне понадобились монады
монады имхо не могут понадобиться. Ну, кроме IO, но ее можно воспринимать как паттерн и не вдаваться в детали. А все остальное можно сделать и без монад. Точно так же, как на плюсах можно писать без классов а на Си без функций.

Dmitry
24.05.2017
13:45:08
это надо большую силу воли иметь. и долго это не продлится

Google

Андрей
24.05.2017
13:46:21
ну я про вообще принципиальную возможность, что это не является неким необходимым и обязательным, а в конце концов приходят к этим абстракциям и используют их для облегчения жизни.

Dmitry
24.05.2017
13:47:50
ну, как известно для того, что бы делать вообще всё, достаточно одной единственной инструкции, например SUBLEQ
всё остальное в любом языке - просто синтаксический сахар.

Андрей
24.05.2017
13:48:43
нет, ну до дна опускаться не будем - иначе лямбда абстракция с аппликацией нашевсе
просто я к чему - если трудны монады - пиши без монад, потом по мере постижения можно будет переключиться (и то не на все поначалу)

? animufag ?
24.05.2017
14:03:37
это надо большую силу воли иметь. и долго это не продлится
да ну? ну если не брать io который просто в do пишешь и всё ок.
бывает иногда, конечно, используешь монадные функции для maybe или списка тк они уместны, но это не часто происходит. Примерно как list comprehension.
Когда на парсеке пишешь обычно функторы и аппликативные функторы нужны. ну и alternative monoid. до монад редко доходит

Arseniy
24.05.2017
14:17:04

Евгений
24.05.2017
14:19:45

Misha
24.05.2017
14:25:10
Не совсем так. Невозможно иметь только один вид подобного эффекта, возможность сделать тред означает, что можно эмулировать состояние через общение с тредом, имея сеть, можно открывать какие угодно сокеты и эмулировать что угодно вообще и тд
а, ну я тоже самое и сказал примерно

Евгений
24.05.2017
14:29:22
Вообще интересно, но ведь на уровне ОС можно построить иерархию побочных эффектов нормальную, нет?

Quet
24.05.2017
14:31:38
смотря что считать "нормальной" иерархией

Arseniy
24.05.2017
14:33:08
Смотря, что считать ОС :D

? animufag ?
24.05.2017
14:36:29
В смысле когда делаешь свою ОС? думаю люди не особо двигаются в этом направлении. ну разве что на мобилках приложения просят разные пермишоны. но это скорее уровень предоставляемого сдк, а не ос

Евгений
24.05.2017
14:37:45
Ну люди и в направлении использования хаскеля не особо двигаются

? animufag ?
24.05.2017
14:41:05
ну я про то что скорей всего такой идеи ни у кого толком не было и пейперов про это не пишут.
хаскелем то пользуются

Мерлин
24.05.2017
14:42:05
[last news]
The Haskell Cast Episode 13 – John Wiegley on Categories and Compilers

Евгений
24.05.2017
14:43:07

Misha
24.05.2017
15:57:07
а кто знает чего оно возмущается?
https://gist.github.com/lolepezy/30820595afd9217083c5ca629e350b55
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

Google

Misha
24.05.2017
15:58:34
то есть ему типа надо что-то знать о ix, чтобы удостовериться, что его можно подставить в g а качестве параметра
короче, проблему я понял, нужно как-то указать, что ix - это тип из списка ixs, но как ее решить пока не пойму

Alexander
24.05.2017
16:34:47
могу вечером посмотреть

Dmitry
25.05.2017
00:09:56
Я не настоящий сварщик, но что-то мне подсказывает, что надо Functional Dependencies использовать

Дмитрий
25.05.2017
03:39:47

Evgeniy
25.05.2017
05:31:51
подскажите по тулингу (в emacs или в atom), есть ли где такой функционал?:
- выделяем выражение и получаем автодополнение функций оперирующих с его типом и доступных в текущем скоупе (либо показывает от куда их можно импортнуть)
- переименовать тип во всем проекте разом
-- сходу просто не нашел, хотя и не сильно искал

Vladimir
25.05.2017
05:57:15
не видел нигде

Admin
ERROR: S client not available

Vladimir
25.05.2017
05:57:16
((
юзал с хаскелем и emacs, и atom

? animufag ?
25.05.2017
06:01:14
Вроде бы можно hole поставить и посмотреть варианты от ghc

Evgeniy
25.05.2017
06:09:10
не видел нигде
Жаль, после скалы тяжко без такого. Хотя вроде бы вполне реализуемые фичи.

? animufag ?
25.05.2017
06:13:39

Evgeniy
25.05.2017
06:40:08

Alexander
25.05.2017
06:53:58
ну в виме даже плагины были и имакса
для рефакторинга HaRe было, но оно неживое было
пытались воскресить

Alexey
25.05.2017
08:43:37
Как в хаскеллёвом проде поступают с отладочным логирование, всё через IO?

Google

Alexander
25.05.2017
08:55:21
Debug.Trace
он правда unsafePerformIO . putStrLn

Alexey
25.05.2017
08:58:24
И такой unsafePerfomIO не может породить кучу непонятных проблем в дальнейшем?

Alexander
25.05.2017
08:59:26
с чего бы?
ну и отладочная печать это же про временные штуки, которые не коммитятся?

Boris
25.05.2017
09:04:49
Просто иногда он не будет принтить, если функция уже посчитана
Или не в то время

Alexey
25.05.2017
09:09:56
Ладно, логировать зачастую хочется с таймером, а тут опять без IO не обойтись
Или опять же логи хочется писать в файлы

Arseniy
25.05.2017
09:13:35
Попробуйте нашу библиотечку
https://github.com/serokell/log-warper

Dmitry
25.05.2017
09:14:48
А примеры использования есть?
А аналог printf? Т.е. С переменным числом аргументов

Alexey
25.05.2017
09:21:36
А часто ли используют подход , что собираешь логи через writer а потом разовое пишешь большой кусок в IO?

Quet
25.05.2017
09:22:38
а зачем?

Arseniy
25.05.2017
09:22:48
Ну если приложение умрет, то не запишет ничего :)

Дмитрий
25.05.2017
09:25:52
У меня батчинг используется в модуле, который струячит по паре мегабайт логов в секунду, просто для того, чтобы все не померло, занимаясь выводом в консоль в реалтайме

Alexey
25.05.2017
09:27:26
Ну в случае к примеру у тебя есть массивный чистый пайплайн по обсчету данных и ты хочешь посмотреть потом промежуточные результаты. Ну и промежуточные результаты не важны если все упало

Dmitry
25.05.2017
09:48:34
@jagajaga Посмотрил примеры, прикольно! Сделайте printf-like вывод! logDebug "Температура %f , а критическая %f" 10.50 100.500

Artyom
25.05.2017
09:50:12
а мы formatting всюду используем и поэтому нам printf-like вывод не нужен :troll:
(а ещё перейдём на fmt, когда у меня руки дойдут)