Size: a a a

2021 April 13

SB

S B in ФП
я не могу твердо судить
источник

АГ

Александр Гранин... in ФП
Stack - это game changer, возникший из реальных потребностей и являющийся продуктом для людей. Снойман мог бы уже другого ничего не делать, его вклад со stack сложно переоценить
источник

DS

Doge Shibu in ФП
Тут не только в системах сборки проблемы, но и в том, что и как входит в стд либу и в фольклорном знании как обходить и бороться с проблемами самого языка.

Ну и как простейщий пример - новичок в языке вряд ли сможет догадаться как сделать из хаскелевских рекордов хоть что-то пригодное для работы.
источник

DS

Doge Shibu in ФП
(Ну с RecordDot это изменится, но всё равно про это расширение хотя бы надо будет слышать хоть что-то, а новички в расширения не заглядывают особо обычно)
источник

DK

Daniil Kostin in ФП
то, что я нагуглил, видимо вы имеете ввиду лямбды
fn((a) => a + 1)
fn принимает функцию, при запуске вычисляет и работает с ее результатом.
источник

AK

Alex K in ФП
а F# в таком случае?
m
|> Option.bind f
|> Option.bind g
|> Option.bind h

по сути Option.bind это отдельная функция
источник

АГ

Александр Гранин... in ФП
Тоже не выглядит монадой
источник

AK

Alex K in ФП
но тут соблюдается вложенность, как писали ранее
источник

SB

S B in ФП
нет. я полагаю, у вас какой-нибудь Котлин?
источник

АГ

Александр Гранин... in ФП
Вложенность - может, но вот не вижу типа монады. Внутренняя цепочка должна иметь тип (a -> m b) - тип функции. Это не потому, что Хаскель так сказал, а потому что так монадические функции выглядят. Они - лямбды, которые принимают какой-нибудь входной параметр и должны вернуть монадическое значение m b, которое потом подхватывается функцией bind, и с ним происходит разная магия, зависящая от конкретной монады. Если этого значения нет, или оно не возвращается, я не понимаю, где лежит сам монадический механизм
источник

SB

S B in ФП
а, в этом смысле да. но мне, например, помогает кодревью. просто скидываешь пример сомнительного кода в чатик и тебе отвечают что надо было делать проще
источник

AK

Alex K in ФП
Option == Maybe
источник

DK

Daniil Kostin in ФП
у меня bind: както так выглядит: M<A>.bind(M<B> Function(A a)) то есть он принимает функцию от А кторая преобразует ее в M<B> и на выходе будет M<B>
источник

АГ

Александр Гранин... in ФП
Это я знаю. В С++ это тоже есть. У меня сомнения, что это именно монадический bind, а не какая-то его более упрощенная версия
источник

SB

S B in ФП
это верно
источник

DS

Doge Shibu in ФП
Не от всего поможет. Ну и в целом, проблема именно в том, что экспириенс хаскеля из коробки совершенно кривой.

Ты не можешь его взять и пойти из коробки писать что-то в прод как новичок, потому что дефолты что стд либы, что языка, что рантайма - совершенно кривые и для прода никак не подходят.

При этом у всех современных языков таких проблем сейчас нет. Хаскель тут выделяется
источник

SB

S B in ФП
остается только надеяться, что это через пару лет исправится
источник

АГ

Александр Гранин... in ФП
Это правильно. У меня в С++ то же. Тут прикол в том, что между записями

bind (M<A>, Function<A, M<B>>)

и

M<A>.bind(Function<A, M<B>>)

есть тесная связь. По сути, Скала и C# показали, что это одно и то же
источник

DK

Daniil Kostin in ФП
у меня Dart, можно не считать его языком 😉
в котлине помоему есть явное указание inline
источник

АГ

Александр Гранин... in ФП
Как новичок в прод на Хаскеле сразу ты, конечно, можешь писать, если твой прод - это что-то совсем простое. А новичков в golang, готовых писать сложный прод, я к этому самому сложному проду не подпустил бы. Не потому, что golang, а потому что новички.

Как новичок, ты не можешь начать писать сложный прод и на С++, и на C#. Новички вообще не должны без присмотра писать сложный прод
источник