Size: a a a

2021 January 20

AP

Aleksei (astynax) Pi... in Haskell Start
Что есть, то есть
источник
2021 January 21

AR

Aleksandr Ruin in Haskell Start
этот пример из [https://wiki.haskell.org/IO_inside#I.2FO_in_Haskell.2C_simplified] правильний?

getchar :: Int -> (Char, Int)
get2chars _ = [a, b]  where (a, i) = getchar 1
                           (b, _) = getchar i

ведь нельзя биндидь без обазначения getchar
источник

AP

Artem Pelenitsyn in Haskell Start
Aleksandr Ruin
этот пример из [https://wiki.haskell.org/IO_inside#I.2FO_in_Haskell.2C_simplified] правильний?

getchar :: Int -> (Char, Int)
get2chars _ = [a, b]  where (a, i) = getchar 1
                           (b, _) = getchar i

ведь нельзя биндидь без обазначения getchar
Вы имеете ввиду, что нет определения getchar? Там подразумевается что это некая встроенная функция. Вообще, все это обсуждение проводится на умозрительным уровне, чтобы объяснить идеи. Пытаться это запускать не надо.
источник

K

Kaksisve in Haskell Start
Товарищи, у меня созрел вопрос. При работе с монадными транформерами как лучше оформлять типы функций: используя сам трансформер или тип, который он оборачивает?

Вот пример:
источник

K

Kaksisve in Haskell Start
Вопрос, скорее всего, из рубрики "style guide".
источник

к

кана in Haskell Start
если уж используется MonadIO, то я бы тут взял бы MonadError
источник

к

кана in Haskell Start
а, вот оно что, это ошибка чисто для функции, тогда Either
источник

K

Kaksisve in Haskell Start
Ошибка действует только в рамках функции.
источник

к

кана in Haskell Start
это вопрос ни разу не style guide, это вопрос семантики

если бы ошибка была глобальная (модуля, или приложения в целом), то или MonadError, или конкретный тип для этого модуля

раз это ошибка чисто для функции, то Either, потому что это не эксешпен, а просто один из результатов вызова функции, и при этом только этой функции
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Kaksisve
Ошибка действует только в рамках функции.
Вы же разворачиваете ExceptT прямо в функции. Уже никакого ExceptT не будет в типе результата, только Either
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Если хочется композировать это вычисление с другими в ExceptT же, то стоит ExceptT оставить (и не делать run)
источник

к

кана in Haskell Start
но тогда и ошибку лучше обобщить, а то такую функцию можно будет скомпозировать только с этой же функцией
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Тип ошибки может быть специфичным для функции. При композировании можно преобразовать ошибку в другой тип так или иначе
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Завернуть в конструктор агрегирующего типа, например. Получится иерархическая система ошибок
источник

K

Kaksisve in Haskell Start
кана
но тогда и ошибку лучше обобщить, а то такую функцию можно будет скомпозировать только с этой же функцией
Вы имеете ввиду это?

data GlobalError
   = ReadOptionsFileError ...
   | ...
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Да, что-то такое
источник

к

кана in Haskell Start
да, можно будет через withExceptT ошибку заворачивать выше
источник

K

Kaksisve in Haskell Start
Спасибо.
источник

AN

Absolute Nikola in Haskell Start
Привет, а может кто-нибудь объяснить суть GADTов и для чего они нужны?
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Чтобы указать более точно типы конструкторов
источник