Leonid 🦇
Alexander
Aliester
че?
Ю ли я? 🤔
Хаскель ещё и лучший императивный язык так-то!
Oleg
Хорошее ООП - отсутствующее ООП
kosc
А какой худший императивный язык?
Anonymous
Ответ все , принимается?)
Alexander
nyan-nyan
zool
Alexander
потому, что вы о нём не слышали
Alexander
и даже я не слышал, и возможно его не существует
Aleksei (astynax)
Malbolge
Он не худший. Он просто сложный с точки зрения написания кода - для того и создавался :)
kosc
Но это моё понимание.
kosc
Могу ошибаться.
Dmitry
Ну тогда да, Haskell лучший императивный язык
Dmitry
У меня в нём лучше всего получается писать, что надо для достижения результата
kosc
А разве ты не описываешь в нём только сам результат?
kosc
Я всегда думал, что в этом и есть идея декларативных ЯП.
Dmitry
main = putStrLn "Я -- результат?"
Dmitry
Тут ^ где результат?
kosc
Монада в этой дискусси - читерство.
kosc
Я так и Language.Basic притащу и буду на бейсике внутри хачкеля кодить, чё.
kosc
И обвинять хачкель в недостатках бейсика.
Dmitry
Ну ок, давайте найдём разницу:
int fac(int x) { if (x == 0) return 1; else x * fac(x - 1); }
и
fac 0 = 1
fac n = n * fac $ n - 1
Где описываю "сам результат", а где — не описываю?
kosc
Хм....
Dmitry
Или чистые функции в C (по аналогии с монадами в Haskell) — читерство?
kosc
Ладно, признаю поражение.
kosc
Объясните тогда нубу, в чём декларативность хаскеля?
доня.
IC
kosc
В монадах
В том, что код с побочными эффектами и явной последовательностью выполнения вынесен отдельно от остального ЯП что ли?
IC
В том, что конструирование кода отделено от его исполнения.
IC
[IO ()]
kosc
Ты шо, монаду в монаду завернул?
kosc
Это вообще законно?
IC
В функтор.
kosc
Список - функтор?
kosc
Херовые походу мне книжки попались.
Dmitry
Да можно, просто так микросхемы памяти быстрее деградируют. Надо аккуратно.
kosc
Там писали, что список, Maybe и IO - монады.
Andrew
Maybe тоже функтор
Andrew
и монада
Dmitry
И IO :(
IC
Список - функтор?
Некоторые типы - функторы. Из них некоторые - апликативы. Из них некоторые - монады.
доня.
IC
доня.
монады не имеют никакого отношения к I/O в хаскеле
Andrew
ну и соотв. они и фкторы и монады)
Andrew
ойвсе
IC
IC
* не всегда
доня.
Dmitry
А цепочки применения функций — это не "последовательные шаги" вычисления результата?
Dmitry
f . g . h ?
Dmitry
А есть синтаксис, чтобы не слева или справа брать результат, а сверху, например?
Dmitry
h
|
v
x >=> ВЖУХ <=< y
IC
Есть
доня.
zool
Сейчас кто-нибудь просветится и пойдет писать правильный туториал по монадам
Dmitry
Oleg
доня.
ты понятия не имеешь что произойдёт когда ты применишь f . g . h $ x
может x не используется внутри и тогда он не будет вычислен
может функция мемоизируется и тогда будет вычислена лишь один раз
может ещё что-то
ты не думаешь в действительности о том как по шагам будет выполняться твоя логика, ты просто описываешь маппинги из одних значений в другие и комбинируешь их, всё
доня.
самая странная поправка, что я слышал в этом чате
ну я топлю за то что эта поправка правильная, особенно когда объясняешь что-то новичкам
вроде статья была, типа monads considered harmful или вроде того
суть в том что когда ты начинаешь говорить типа «чтобы делать I/O в хаскеле нужна монада IO», «чтобы работать с состоянием нужна монада State» и т.д., у абсолютно каждого новичка складывается ощущение что монады — это такой магический способ обойти чистоту хаскеля
доня.
поэтому фраза типа «декларативность хаскеля в монадах, потому что они позволяют отделить I/O код от чистого» в корне неверна — к монадам это не имеет никакого отношения, монады лишь для того чтобы такие вычисления удобнее было композить
Oleg
Oleg
звучит, как будто хотел придраться, но точно не знал как
Dmitry
Dmitry
kosc
Ок, спасибо, гляну.
доня.