Meowbe/BSD-2-Clause
Сон никому не вредит
Aliester
Ты треть жизни спишь
Aliester
А мог бы кодать
Meowbe/BSD-2-Clause
Я сплю довольно мало
Meowbe/BSD-2-Clause
И кодаю наверное слишком много
Meowbe/BSD-2-Clause
Если слишком много бывает
Aliester
У меня тут конфликт внутренний. С одной стороны я недоучка и мне нужно серьёзно подтянуть фундаментальщину. С другой можно получать знания по языку, фреймворку и фронтэнду чтобы облегчить свою работу и повысить ликвидность прямо сейчас, но это будут менее глубокие знания в связи с лакунами в базовом образовании в CS.
Андрей
держи нас в курсе)
Aliester
Alexander
ребят, давайте без картинок таких?
Alexander
/stat@combot
Combot
combot.org/chat/-1001043143583
Alexander
Name Activity Messages Active days Flood ratio leon nikitin 0.263% 5 4 143
Alexander
5 сообщений и все хейтспич про канал, где большой оффтоп был один день когда не было активных тем про on topic, серьезно?
Alexander
есть только 1 хороший способ делать чтобы на канале были "хорошие" темы, контрибьютить в темы и обсуждения
Alexander
@nlvomsk давай ты пойдешь этим путем?
Alexander
я, конечно, понимаю оффтоп мешает молчаливым читателям, из 500 человек наверняка есть много кто только читает и ничего не пишет, но я не знаю что с этим сделать
Андрей
вот поясните, почему в книжках любят писать про монадки, но не упоминают про трансформеры монадок
Meowbe/BSD-2-Clause
В реал ворлд хаскелль есть
Meowbe/BSD-2-Clause
Вполне книжка
Андрей
есть в pdf ? )
Meowbe/BSD-2-Clause
Но вообще, если ты понимаешь монады, то до трансформеров не так сложно самому дойти
Meowbe/BSD-2-Clause
есть в pdf ? )
Есть сайт
Meowbe/BSD-2-Clause
И бумажная
Meowbe/BSD-2-Clause
В пдф не знаю
Alexander
о риливская, пдф где-то должен быть
Meowbe/BSD-2-Clause
Мне припёрло заказать бумажную
Meowbe/BSD-2-Clause
Большая довольно
Aleksei (astynax)
Про трансформеры есть пейпер All About Monads. Там и примеры и интуиция
Aleksei (astynax)
https://wiki.haskell.org/All_About_Monads
Андрей
https://wiki.haskell.org/All_About_Monads ?
Aleksei (astynax)
там же ссылка на PDF
Андрей
ай
Андрей
короче читаю в данный момент
Aleksei (astynax)
Там и про простые монадки хорошо написано, если что. И примеры, и "как к этом пришли", и прочее
Aleksei (astynax)
Трансформерщина с главы 17 начинается
Anonymous
http://book.realworldhaskell.org/read/
Aleksei (astynax)
В RWH не то чтобы хорошо рассказывается про трансформеры. Да и сама книга во многом уже не real world
Anonymous
Для начала годится. Делитесь другими ссылками!
Anonymous
.. и другими ссылками.
Андрей
class (Monad m) => MonadError e m | m -> e where throwError :: e -> m a catchError :: m a -> (e -> m a) -> m a вот | m -> e это вообще что
Denis
functional dependency
Aleksei (astynax)
говорит, что "параметра у тебя два, но один однозначно определяет другой"
Андрей
что значит однозначно определяет
Denis
говорит о том что для m есть только один e
Aleksei (astynax)
для конкретного m может быть только один парный e, да
Aleksei (astynax)
в инстансе
Андрей
вот если я потом пишу instance MonadError (Either e) where throwError = Left (Left e) `catchError` handler = handler e a `catchError` _ = a где я тут однознчно что определяю?
Андрей
я такое только в исходниках стдлиб видел, не в книгах, это как-то с версией хаскеля связанно?
Aleksei (astynax)
Ну это такой экстеншн
Aleksei (astynax)
Он выходит за пределы Haskell2010, поэтому во многих книгах его и нет
Aleksei (astynax)
инстанс будет instance MonadError e (Either e) where
Андрей
как это
Андрей
это пример из книги, которую ты советовал
Aleksei (astynax)
У класса MonadError два параметра
Андрей
глава 10.3
Aleksei (astynax)
> instance MonadError (Either e) where <interactive>:10:10: error: • Expecting one more argument to ‘MonadError (Either e)’ Expected a constraint, but ‘MonadError (Either e)’ has kind ‘(* -> *) -> Constraint’ • In the instance declaration for ‘MonadError (Either e)’
Aleksei (astynax)
Да даже ты сам написал class (Monad m) => MonadError e m | m -> e where
Aleksei (astynax)
Два параметра у класса
Aleksei (astynax)
И когда ты класс инстанциируешь, то выбранная монада m будет определять параметр e
Aleksei (astynax)
В инстансе instance MonadError e (Either e) where говорится, что тип ошибки MonadError тот же, что и у Either
Андрей
проверил, есть такое дело • Too many parameters for class ‘MonadError’ (Use MultiParamTypeClasses to allow multi-parameter classes) • In the class declaration for ‘MonadError’ значит источник так себе, есть ошибки
Aleksei (astynax)
Это WiKi - пришли правку :)
Aleksei (astynax)
Источник местами некорректен, но зато охват широкий. А корректность можно подтянуть
Андрей
включил MultiParamTypeClasses и потом ещё FunctionalDependencies
Aleksei (astynax)
А когда будешь объявлять инстанс, то ещё потребуется и FlexibleInstances :)
Андрей
короче, кажется это можно воспринимать как необязательную магию
Meowbe/BSD-2-Clause
Рано или поздно понадобится
Aleksei (astynax)
Что "это"?
Aleksei (astynax)
Эти конкретные расширения - must have практически
Андрей
MonadName a | a -> b
Aleksei (astynax)
Такой подход очень популярен нынче (т.н. "mtl-style тайпклассы"), так что это не "необязательная" магия
Aleksei (astynax)
фандепы - не слишком сложная штука, польза от мультипараметровые тайпклассы тоже сразу понятна :)
Aleksei (astynax)
Вот всякие FlexibleInstances в первое время включаешь, когда компилятор попросит - это можно считать "магией". Благо компилятор тут достаточно лаконичен в плане сообщений
кана
для конкретного m может быть только один парный e, да
То есть я правильно понимаю, что это значит, что где-то внутри индексов m обязательно должен быть e? Магией я это считаю из-за того, что мы не указываем явно "где", мы указываем "где-то тут в типе"
Aleksei (astynax)
Да, либо ты должен указать конкретный тип
Aleksei (astynax)
instance MonadError () Maybe where такое должно сойти тоже