@haskellru

Страница 1418 из 1551
Dmitry
21.08.2018
07:17:10
Если очень грубо: вот у тебя есть N монад, ты добавляешь ещё одну. Надо организовать взаимодействие с N монадами. Не всегда это автоматически удаётся сделать.

Но это если грубо.

Hot
21.08.2018
07:17:34
А, ну примерно вроде понял.

Надо погонять 2-3 примерчика, и поверхностное понимание сложится. А дальше по идее должно быть проще.

Google
Dmitry
21.08.2018
07:18:31
https://ru.wikibooks.org/wiki/Haskell/Monad_transformers

Во что есть!

Maxim
21.08.2018
07:21:47
М, сендвичи

Hot
21.08.2018
07:22:15
https://ru.wikibooks.org/wiki/Haskell/Monad_transformers
Ага, спс, сейчас как раз туда гляжу.

Dmitry
21.08.2018
07:23:01
Курс на Степике попробуй, он годный. Можно сразу со второго.

Hot
21.08.2018
07:23:13
Он бесплатный?

А то я пока бомжую.

Да и Haskell у меня как хобби, а не как профессия.

Dmitry
21.08.2018
07:25:09
Бесплатный.

Aleksey
21.08.2018
07:25:10
Монадки вкладывать можно и без трансформеров. Но придётся руками обеспечивать "перенос эффекта". А с трансформерами нужно просто лифтить нужное кол-во раз :)

Кол-во уровней вложенности будет влиять только на кол-во вызовов lift для доступа к конкретному слою. Если взять подход mtl, то можно не лифтить руками при условии, что слои будут разные

Dmitry
21.08.2018
07:26:15
Да и Haskell у меня как хобби, а не как профессия.
Ну если ты уже до монадных трансформеров дошёл, то курс нормально проведёт дальше по миру Haskell :)

Pineapple
21.08.2018
07:26:34
Еще можно написать инстансы (Functor f, Functor g) => Functor (Compose f) и такой же для аппликатива. И разобраться почему нельзя написать такой же для монад

Google
Denis
21.08.2018
07:26:34
базовые монадки даже можно менять довольно general

Denis
21.08.2018
07:28:54
А есть всякие liftMaybe и так далее?
есть просто lift из MonadTrans

это обобщение всех случаев

@hotkosc держи, тут step by step https://two-wrongs.com/a-gentle-introduction-to-monad-transformers

Hot
21.08.2018
07:30:19
О, спасибо!

Aleksey
21.08.2018
07:30:34
IO - особенная монадка. Если она есть в стеке, то всегда в конце

Denis
21.08.2018
07:30:58
IO всегда должен быть на самом нижнем уровне в трансформерах

Aleksey
21.08.2018
07:31:18
Потому как IO нельзя "распаковать и потом запаковать"

Поэтому не получится "сквозь IO" лифтить

Denis
21.08.2018
07:31:45
нет такого понятния как IOT (хотя хз, можно unsafePerform но это зло)

Aleksey
21.08.2018
07:32:20
unsafePerformIO выполняет IO, а lift - не "выполняет" поднимаемый action. Так что unsafePerformIO в принципе не подходит :)

Pineapple
21.08.2018
07:32:26
Можно написать. Но придётся нарваться на всякие неприятные сюрпризы

Hot
21.08.2018
07:40:19
data ParsecT s u m a А что вот в доках Parsec озаначает вот этот трансформер? Он одну в другую монаду заворачивает или там их больше?

Ну и в чём суть, а то я из доков не понял.

Dmitry
21.08.2018
07:41:22
s u m a - это параметры типа.

Hot
21.08.2018
07:41:42
Ну вот да, то есть каждый из них - суть отдельная монада?

Dmitry
21.08.2018
07:41:53
Суффикс T говорит, что это ParsecT - это трансформер, т.е. его можно надеть на другую монаду.

Google
Hot
21.08.2018
07:41:58
Всмысле, параметр для понаты.

Dmitry
21.08.2018
07:43:00
Монада задаётся предпоследним параметром m, как правило.

Ну вот там даже ниже есть пример для монады Identity:

type Parsec s u = ParsecT s u Identity

Ну и в самом начале: ParsecT s u m a is a parser with stream type s, user state type u, underlying monad m and return type a.

Hot
21.08.2018
07:46:26
Блин, пока чёт сложна.

Видимо, рано я полез Parsec курить.

Dmitry
21.08.2018
07:47:32
На Степике есть упражнение по написанию своего парсера, если чо ;)

Hot
21.08.2018
07:47:59
Круто!

Dmitry
21.08.2018
07:48:13
А вообще, полезно разобраться с монадой State, тогда Парсек просто понять.

Denis
21.08.2018
07:53:01
Dmitry
21.08.2018
08:50:22
На случай, если кто-то пропустил туториал по Backpack на примере реализации интерфейса для контейнеров.

New blog post about Backpack implementation for containers interfaces in Haskell • https://kowainik.github.io/posts/2018-08-19-picnic-put-containers-into-a-backpack

kana
21.08.2018
09:45:53


Kirill
21.08.2018
10:00:57
конструктор просто просит чтоб перед ним id поставили...

Alex
21.08.2018
10:08:11
Джентельмены, а почему кабал жалуется на табы? Скажите пожалуйста, где можно изменить настройку индентов

Alex
21.08.2018
10:10:16
Это да, но я бы хотел юзать табы вместо спейсов

Google
Yuriy
21.08.2018
10:11:12
в кабалфайле?

Alex
21.08.2018
10:11:55
Я не могу нагуглить, как там дать такую инструкцию

Dmitry
21.08.2018
10:13:33
-fno-warn-tabs ?

Yuriy
21.08.2018
10:14:41
в языке, чувствительном к отступам, лучше не использовать табы

Alex
21.08.2018
10:15:06
Ладно, я думаю это не страшно, спейсы так спейсы. Только зачем так жестко сеттить, что при использование таба в кабал файле для индента он перестает билдить

Мне ужас как неуднобно. В С++ коде у меня табы, в хаскеле спейсы и там и там я использую ВСкод.

Наверно нужно гуглить как сеттить настройки для расширений файлов

Не заставило себя долго ждать

Есть вот такая штука

"editor.detectIndentation": true

Admin
ERROR: S client not available

Алексей
21.08.2018
10:17:49
Мне ужас как неуднобно. В С++ коде у меня табы, в хаскеле спейсы и там и там я использую ВСкод.
У vscode есть настройки рабочих областей, тогда будте создана директория .vscode с файлом settings.json и там настройки можно указать локальные для текущего проекта

kana
21.08.2018
10:17:53
ну или просто перейти везде на спейсы

"[haskell]": { "editor.tabSize": 4 },

Piu
21.08.2018
10:18:27
Наверно нужно гуглить как сеттить настройки для расширений файлов
Можно переопределять локально глобальные настройки

Yuriy
21.08.2018
10:19:10
Мне ужас как неуднобно. В С++ коде у меня табы, в хаскеле спейсы и там и там я использую ВСкод.
считай, что это такой язык, что заставляет писать переносимый код

Alex
21.08.2018
10:19:59
считай, что это такой язык, что заставляет писать переносимый код
А какая существует связь между переносимостью кода и индентом?

Mink
21.08.2018
10:20:12
"[haskell]": { "editor.tabSize": 4 },
Вместо вот такого можно еще .editorconfig юзать

Dmitry
21.08.2018
10:22:59
Непереносимо :(

Google
Yuriy
21.08.2018
10:23:25
А какая существует связь между переносимостью кода и индентом?
переносимость между редакторами. не все редакторы правильно работают с табами

Alex
21.08.2018
10:23:35
Понял, спасибо:)

Yuriy
21.08.2018
10:24:16
У разных людей Tab разной длины
а тем, у кого не 8 и не эластичные, надо презервативы бесплатно выдавать

Евгений
21.08.2018
11:00:12
У меня даже в разных языках разные софттабы

A64m
21.08.2018
11:46:45
> Second round of #CFP is now open for #FnConf18. We are looking for sessions on #Erlang #Elixir #Scala #Clojure #GoLang #APL & other #FunctionalProgramming languages отличный список ФЯ

Евгений
21.08.2018
11:48:36
ГОЛАНГ

Дед Пегас
21.08.2018
11:53:32
Голаны.

Dmitry
21.08.2018
11:54:03
& other Functional Programming language, теперь так Хаскель называется

Nikita
21.08.2018
11:54:51
хаскель это просто чуть более продвинутый го

Piu
21.08.2018
11:55:59
хаскель это просто чуть более продвинутый го
то есть получается хаскелист это просто чуть более продвинутый гофер?

Dmitry
21.08.2018
11:57:14
Чуть-чуть более, да

A64m
21.08.2018
11:57:30
менее продвинутый

чем продвинутей язык, тем менее продвинутым надо программисту быть

Andrei
21.08.2018
11:57:56
более ленивый

Pineapple
21.08.2018
11:58:23
Страшных слов надо не бояться

Антон
21.08.2018
12:00:11
Насколько продвинутый Хаскелл?

A64m
21.08.2018
12:01:10
где-то до конца 80-х - начала 90-х

> GC pauses that bring down your site during peak usage, at the most critical time of business for the company losing tons in revenue; leaked filehandles leading to “too many open files” and crashing your system; exceptions improperly ignored and dropped on the floor

Dmitry
21.08.2018
12:01:44
где-то до конца 80-х - начала 90-х
А дальше Haskell не продвигали?

A64m
21.08.2018
12:02:42
если сделают завтипы до конца 90-х продвинут

Dmitry
21.08.2018
12:06:07
А хотя бы в 2010-ых какой язык?

Страница 1418 из 1551