Vasiliy
касательно http-conduit - если сами conduit не нужны, то можно взять http-client
Cheese
@seogud, питонисты и жаваскриптеры самые востребованные, по-моему
Aλexander
Джависты еще.
Cheese
блин, опять я влез, когда всё уже обсудили
Cheese
простите
Viacheslav
я по сути использую http-client, видимо
Viacheslav
conduit мне не очень нужен
Viacheslav
делать какой-то catchAll в этом месте?
Зигохистоморфный
use UIO, Luke
UIO?))) UFO
Viacheslav
use UIO, Luke
ничего не понял
Viacheslav
можно немно подробнее
Cheese
http://hackage.haskell.org/package/unexceptionalio
Cheese
это такое IO, из которого ничего (синхронного) не вылетает
Cheese
я его не использовал, но я и от исключений не страдаю
лучшее щас: крипта.
Vasiliy
делать какой-то catchAll в этом месте?
я лично, начитавшись статей сноймана, использую safe-exceptions для обработки исключений и шарюсь в случае необходимости по документации и коду, выясняя, какие именно исключения могут вылететь
Alexander
но safe-exceptions же только для чуть более аккуратной работы с асинхронными исключениями
Leonid 🦇
и это очень хорошо
Alexander
нормально
Leonid 🦇
:)
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
Забавно, что 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
По-моему видел такую конструкцию в статье про гетерогенные списки
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
Конкретный