Size: a a a

Elm Lang сообщество разработчиков

2020 October 01

D•

Dan • Captain in Elm Lang сообщество разработчиков
Всем привет, а чем форматируют обычно сурсы? https://github.com/avh4/elm-format это ОК?
источник

D•

Dan • Captain in Elm Lang сообщество разработчиков
Разбанили, конечно же. Бот и правда иногда шалит, но не так часто
источник

MP

Max P in Elm Lang сообщество разработчиков
@iampiupiu все форматирует с elm-format я думаю
источник

PP

Piu Piu in Elm Lang сообщество разработчиков
да астинакс уже ответил на все вопросы спасибо
источник
2020 October 03

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
1. Left identity
succeed x |> andThen f === f x

2. Right identity
x |> andThen succeed === x

3. Associativity
(x |> andThen f) |> andThen g
===
x |> andThen (\v -> f v |> andThed g)
Извините, что встреваю, но во втором и в третьем пунктах там не просто x, а и succeed x и fail smth. В законах монад в этих пунктах указано m, в отличие от a в первом, и подразумевается, что это сама монада, а не просто значение.

В таком виде в такой трансляции легко подумать, что речь про значение и, конечно, тогда путаница.
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
1. Left identity
a) Just x |> andThen Just === Just x
b) Just x |> andThen (\_ -> Nothing) === Nothing
c) Just x |> andThen f === Just <| f x

2. Right identity
a) Just x |> andThen Just === Just x
b)
Nothing |> andThen Just === Nothing

3. Associativity
a) (Just x |> andThen f) |> andThen g
===
Just x |> andThen (\v -> f v |> andThen g)
b) (Nothing |> andThen f) |> andThen g
===
Nothing |> andThen (\v -> f v |> andThen g)
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Короче там ещё проблема, что return в Хаскеле — это и Just и succeed и Ok и ..., в зависимости от контекста текущей монады, и законы крутятся вокруг него. В Эльме такой абстракции нет, поэтому законы выглядят абсурдно и надо их выражать для каждой монады.
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Короче всё сходится, и с andThen и с map, по крайней мере в ядре и у большинства типов из большинства библиотек :)
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Anton Kotenko
Извините, что встреваю, но во втором и в третьем пунктах там не просто x, а и succeed x и fail smth. В законах монад в этих пунктах указано m, в отличие от a в первом, и подразумевается, что это сама монада, а не просто значение.

В таком виде в такой трансляции легко подумать, что речь про значение и, конечно, тогда путаница.
success там точно быть не должно, потому что x означает любой таск, а не только успешный
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
А вообще надо на типы смотреть! А не на имена. Если стоит перед andThen, значит в контексте уже
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Anton Kotenko
Короче там ещё проблема, что return в Хаскеле — это и Just и succeed и Ok и ..., в зависимости от контекста текущей монады, и законы крутятся вокруг него. В Эльме такой абстракции нет, поэтому законы выглядят абсурдно и надо их выражать для каждой монады.
И абсурдности никакой нет. От того, что нельзя поведение обобщить средствами языка, сами выражаемые концепции не перестают существовать.
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
То, что числа в комьютере конечны и местами не очень точны, не делает их сложение абсурдным и проверку коммутативности этого сложения — тоже
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
В моём же примере важна суть, а не форма. Но нет, надо было ворваться и написать "бла бла, тут абсурд, потому что не как в хаскеле"
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
success там точно быть не должно, потому что x означает любой таск, а не только успешный
«Голубого слоника там точно быть не должно, потому что x означает любого слоника, а не только голубого». Нелогично.

Если x означает не только голубого слоника (но и розового), то голубой слоник там точно имеет все права быть. А также розовый.
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
И абсурдности никакой нет. От того, что нельзя поведение обобщить средствами языка, сами выражаемые концепции не перестают существовать.
Я написал, что «выглядит абсурдно» — подразумевал, что на первый взгляд. Не писал, что делать такие примеры  абсурдно — наоборот хорошо, просто сложно из-за разных контекстов.
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Ок, можно буковку поменять. Но люди должны уметь читать код с andThen и видеть общий смысл того, как преобразуются значения и как передаётся контекст
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
И x >>= f содержит сильно меньше визуального шума, чем x |> Task.andThen f, но чего уж теперь поделать
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
(я уж молчу о том, что во втором случае конкретика примешивается в обобщённую идею связывания)
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
Ок, можно буковку поменять. Но люди должны уметь читать код с andThen и видеть общий смысл того, как преобразуются значения и как передаётся контекст
Не считаю, что наличие дополнительных подводных камней в примерах помогает людям лучше разбираться в концепциях, которые они описывают, тем более если это концепции из другого мира.

В оригинальных законах там разные буквы как раз из-за этого. Плюс, из-за выработанной у тех, кто их обычно читает, привычки, эти конкретные буквы по-разному понимать.

И не только у нас в Эльме с этим проблемы: https://miklos-martin.github.io/learn/fp/2016/03/10/monad-laws-for-regular-developers.html
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Но это полемика уже.  
Вопрос интересный, законы монад (и не только) на Эльм перевести интересно. Спасибо, я сам тоже что-то новое узнал.
источник