Vasiliy
касательно http-conduit - если сами conduit не нужны, то можно взять http-client
Cheese
@seogud, питонисты и жаваскриптеры самые востребованные, по-моему
Aλexander
Джависты еще.
Cheese
блин, опять я влез, когда всё уже обсудили
Viacheslav
про исключения много чего говорят, кто-то говорит никогда их не использовать, только ExceptT IO, кто-то, наоборот, говорит, что если есть IO, то ExceptT и прочее не нужно, есть разные реализации checked-исключений, но факт в том, что если есть IO, то исключение может прилететь какое угодно в любой момент времени, и с этим приходится жить
так а как жить?
Cheese
простите
Viacheslav
я по сути использую http-client, видимо
Viacheslav
conduit мне не очень нужен
Viacheslav
делать какой-то catchAll в этом месте?
Cheese
Зигохистоморфный
Viacheslav
можно немно подробнее
Cheese
http://hackage.haskell.org/package/unexceptionalio
Cheese
это такое IO, из которого ничего (синхронного) не вылетает
Cheese
я его не использовал, но я и от исключений не страдаю
ㅤ
лучшее щас: крипта.
Vasiliy
делать какой-то catchAll в этом месте?
я лично, начитавшись статей сноймана, использую safe-exceptions для обработки исключений и шарюсь в случае необходимости по документации и коду, выясняя, какие именно исключения могут вылететь
Alexander
но safe-exceptions же только для чуть более аккуратной работы с асинхронными исключениями
Leonid 🦇
и это очень хорошо
Alexander
нормально
Andrey
Leonid 🦇
:)
Anonymous
Anonymous
Если из хаскеля убрать вопрос, то получится ад
Проверяйте
Leonid 🦇
@seogud займись devops и смотри на чем популярно ароматизации писать
Leonid 🦇
Автоматизации
Leonid 🦇
Хотя..
Ilya
Вы ловили ошибку GHC "My brain just exploded"? 😀
Ilya
С юмором они там
Ilya
My brain just exploded
I can't handle pattern bindings for existential or GADT data constructors.
Instead, use a case-expression, or do-notation, to unpack the constructor.
Ilya
в первый раз вижу, чтобы компилятор о себе говорил в первом лице
Ilya
киллер-фича хаскель!
Vladislav
Какую ошибку надо допустить, чтобы он о себе в первом лице заговорил?)
Alexander
ловил
Alexander
gadt в лет развернуть и готово
Alexander
let A s = myGadt
Ilya
Да походу не туда forall воткнул
Ilya
Как завернуть полиморфную функцию в конструктор? Чтобы её можно было доставать
Ilya
Собсно это я и хотел сделать
Ilya
Типа data X b = X (t a -> b), функция внутри полиморфна по a
Dmitrii
Добавить forall? Например, как это сделано с типом Fold из прекраснейшей библиотеки foldl
data Fold a b
-- | @Fold @ @ step @ @ initial @ @ extract@
= forall x. Fold (x -> a -> x) x (x -> b)
Ilya
Ilya
Забавно, что ghc это спокойно съел
Ilya
Но зато потом стал ругаться "my brain just exploded"
Ilya
А что вообще значит эта конструкция?
data X b = forall a. X (t a -> b)
Ilya
Компилится, но не даёт развернуть конструктор
Alexander
это exists
Alexander
очень приближенно
Alexander
смысл совсем разынй и конструкция валидная
Vladislav
В 8.2 такой ошибки больше нет
Alexander
о круто, можно пару мест уростить
Alexander
*упростить
Alexander
@Masteroid data X b = X (forall a . a -> b) значит, что в X лежит функция, которая работает для любого типа a который подставит тот, кто разворачивает значение, data X b = forall a . X (a -> b) значит, что в X лежит функция работающая для какого-то конкретного a, который определил тот, кто эту функцию в X клал
Ilya
Ilya
По-моему видел такую конструкцию в статье про гетерогенные списки
Alexander
что интересно без доп констрейнта вторая конструкция бесполезна, т.к. ты того a не знаешь
Alexander
вообще я чаще её встречаю, но например как data SomeFoo = forall x . Foo x, Typeable x => SomeFoo x
Alexander
ну или т.п.
Ilya
Констрейнт это в смысле ограничить тип?
Ilya
Принадлежностью к классу
Alexander
да
Ilya
Прикольно
Alexander
тогда ты точно знаешь что можешь применять методы этого класса к значению
Ilya
Хаскель не перестает удивлять
Alexander
а что тут удивительного?
Ilya
Для меня это выглядит как хак для неполноценной системы типов х-ля
Alexander
хак это unsafeCoerce
Alexander
вот это действтиельно хак
Alexander
а то это варианты использования системы типов
Alexander
причем являющиеся её частью
Alexander
как сказать, что интерфейсы это хак системы типов явы
Ilya
Ну если бы были вложенные типы (вместо классов), то это бы не потребовалось
Alexander
с чего бы вдруг?
Ilya
с чего бы вдруг?
Ну скажем можно было бы указать конкретный тип 'a', а именно Show или Num или че там нам надо делать с элементами этого гетерогенного списка
Alexander
тем более если бы были вложенные типы, то не работало бы все остальное
Alexander
почему?
Alexander
в смысле как
Ilya
Указать максимально общий тип, который нам нужен
Ilya
Конкретный