Denis
мы с тегами юзаем для ридеров
Alexander
когда там у ребят из #serokell (2 l) нужно было 32Гб памяти на сборку
Alexander
с ether правда
Denis
у нас тоже ether есть
Denis
при переходе на 8ку с ним были проблемы
Denis
но мы точечно выпилили
Aleksei (astynax)
Так автор эфира отметился и там и там :) Поэтому и Эфир и тут и там :)
Alexander
по мне class HasX m where getM :: m QuQu + class MyBlaBla m where foo :: ... ; default foo :: HasX m => ..
Denis
ну энивей, мы для кучи ридеров только юзаем
Alexander
работает не хуже
Alexander
MyBlaBla нужен если есть смысл в оверлоадинге, иначе можно просто метод
Denis
можно и рекорд таскать с линзами
Alexander
ещё вариант с линзами
Alexander
и делать zoom
Denis
если оверконстрейнты не парят
Denis
и линзами в него
Vasiliy
а в рекорде методы?
Λrtem
А подскажите, как можно решить следующую проблему с MonadError: Есть одна функция с монадой MonadState SomeState m, MonadError SpecialError m, и хочется её вызвать в монаде MonadState SomeState m, MonadError GeneralError m. Я умею преобразовать один Error в другой, но в монаде это сделать не получается, это вообще возможно?
Alexander
хотя вот то что выше я для ReaderT X m определяю обычно, просто иногда можно дешево сделать rnReaderT
Anonymous
Кстати, а у кого stack (и ghc) нормально устанавливается на win? Сейчас коллеги ставили и это требовало адских шаманств.
Anonymous
Причем, все дело было в том, что он по дефолту ставится в пользовательский AppData....
Anonymous
Если сменить папку назначения, то все ок. Но это повторилось на разных дистрибутивах винды. Накатать репорт?
Alexander
stack - ом нормально ставится
Alexander
что не так с AppData/Roaming ?
Denis
разобрать по кейсам, в Left преобразовать
Alexander
mapExceptT ?
Alexander
или withExceptT
Alexander
а блин там MonadError m
Λrtem
Вот-вот
Denis
из более удобного - сделать один тип, у которого special и general будут разными конструкторами
Anonymous
что не так с AppData/Roaming ?
Ошибки с правами. Создаются какие-то папки, в которые потом не могут быть записаны файлы даже от админа. (Это канеш отдельный пц). Потом повторяется при установке GHC. Win10 и Win7
Denis
data MyError = SpecialError … | GeneralError ...
Λrtem
Хочется именно разные типы
Denis
ну или MonadThrow/MonadCatch взять
Alexander
вот если галки ставить, то уже другое дело
Alexander
MonadThrow/MonadCatch это другой тип треккинга ошибок, там её в типе нет
Alexander
но если это и не нужно, то exceptions конечно более адекватное решение
Denis
Хочется именно разные типы
{-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} data ErrorType = Special | General data MyError :: ErrorType -> * where SpecialErr :: … -> MyError ‘Special GeneralErr :: … -> MyError ‘Special
Alexander
только смотрим MonadError SpecialError m, MonadError GeneralError m - тут разные m
Alexander
т.к. у тебя fundep
Alexander
m определяет e
Λrtem
Да, разные
Alexander
т.е. ты хочешь запустить MonadSpecialError n в MonadSpecialError m
Alexander
что слегка меняет задачу
Alexander
вообще лучший способ тут написать сигнатуру того, что хочешь
Λrtem
Я хочу преобразование ошибок, пытаюсь понять, как лучше сделать
Alexander
преобразование ошибок это не тип : ]
Λrtem
Может руками ExceptT писать вместо MonadError 🤔
Alexander
runM :: ... -> m (Either e a), fmap (bimap (convert :: SpecialError -> GeneralError) id)
Alexander
например конвертнут результат выполнение M, в n
Alexander
в ExceptT есть примитивы конечно, но тут разные m, n. чтобы сказать лучшее решение нужно понимать задачу
Alexander
т.к. можно много чего сделать
Alexander
и это не проблема со многими вариантами сделать одно и тоже
Alexander
т.к. мы пока не понимаем почему автор сделал именно так, наверное есть причины
Anonymous
Кстати, а есть способ определить тип исключения, чтобы не перехватывать someException? (без залезания в код библиотеки).
Alexander
qualified import directed naming vs non-qualified directed naming, вот в чем вопрос
Cheese
http://hackage.haskell.org/package/base-4.10.0.0/docs/Control-Exception.html#v:catch
Anonymous
Ну, это то можно
Anonymous
Но не хорошо)
Cheese
expr `catch` \ (ex :: ArithException) -> handleArith ex
Anonymous
Сейчас я так и делаю кое-где.
Alexander
про это вроде писали
Cheese
что в этом нехорошего?
Alexander
когда говорили про exceptions MonadCatch и MonadThrow
Anonymous
М? Давно? На SO я нашел только ответы в стиле "никак, увы".
Alexander
что давно?
Alexander
MonadCatch и MonadThrow работают с extensible exceptions, которые Control.Exception
Anonymous
expr `catch` \ (ex :: ArithException) -> handleArith ex
Ну вот для этого нужно заранее знать тип ex. Допустим, я получаю в ghci это исключение. Далее - каков его тип?
Alexander
mtl-style классы определелна в exceptions
Alexander
они *не* отображаются в типе m
Alexander
т.е. там может быть что угодно
Cheese
если в ghci, то typeOf
Alexander
ну там ArithException, это очевидно:)
Alexander
так вот, ты в хэндлере явно указываешь тип, исключения который ты ловишь