Size: a a a

2020 August 24

L

LevT in ФП
Кметтовские стратегии реально работают.
Случайно наткнулся https://arxiv.org/abs/1910.11629

ссылка отсюда https://twitter.com/andrejbauer/status/1295691585959731201
источник
2020 September 04

IZ

Ilia Zviagin in ФП
Ну, как?
источник

JS

Jerzy Syrowiecki in ФП
ещё один чат, в котором меня назначили админом по спаму
источник

IZ

Ilia Zviagin in ФП
Ну... больше админов -- меньше спама!
источник

IZ

Ilia Zviagin in ФП
Удачи!
источник

JS

Jerzy Syrowiecki in ФП
пост принял
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in ФП
Jerzy Syrowiecki
ещё один чат, в котором меня назначили админом по спаму
Значит (за что-то) заслужил. Удачи!
источник

JS

Jerzy Syrowiecki in ФП
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Значит (за что-то) заслужил. Удачи!
за то, что быстро замечаю
источник
2020 September 06

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in ФП
Кто на ТС пишет? Я правильно каррирую в ТС? Вот отрывок из обсуждения:

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪:
> кстати, до сих пор спрашивают на собесах, и я не понимаю, зачем

Я бы сразу с такого собеса валил бы, и не ждал бы от них оффера - искал бы другую контору

Прочитал по поводу "++" выше (и в моём примере он используется)... Я видел, что админ попросил не возвращаться к этой теме, но я хочу показать, как можно ещё гибче сделать дополнительным каррированием в предложенном решении, заодно избавившись от (ненавистного) "++" через функцию - с разворачиванием типов в комментах:
https://bit.ly/2Gu5BgR
... вот так мы превратили "3 строчки" (ссылаюсь на слова выше) хардкода -> в 21 строчку (5 - реализация + 3 - сборка + 3 - выполнение + 10 комментов которые IDE и без них подсветит) гибко-настраиваемого getId - дублирую:
const getId = (init: number) =>
   (next: (c: number) => number) =>
       (id: (c: number) => string) => {
           let c = init;
           return () => id(c = next(c));
} // const getId: (init: number) =>
   // (next: (c: number) => number) =>
       // (id: (c: number) => string) =>
           // () => string - inferred
const init2 = getId(2);
// const init2: (next: (c: number) => number) =>
   // (id: (c: number) => string) =>
       // () => string
const myNextInit2 = init2(c => c * 2 + 1); // c => c + 1 - no "++"
// const myNextInit2: (id: (c: number) => string) =>
   // () => string
const myIdNextInit2 = myNextInit2(c => prefix_${c}_postfix);
// const myIdNextInit2: () => string
console.log(myIdNextInit2());
console.log(myIdNextInit2());
console.log(myIdNextInit2());

Andrei Kurosh:
ФП, которое мы заслужили - с каррированием по самое не балуй и при этом с сайд-эффектами

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪:
Энкапсулированными - не надо путать - никто к внутреннему состоянию прямого доступа не имеет - а вы думали как пишется трамплины? - через цикл while. Теми же генераторами больше кода реализовывать
источник

JS

Jerzy Syrowiecki in ФП
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Кто на ТС пишет? Я правильно каррирую в ТС? Вот отрывок из обсуждения:

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪:
> кстати, до сих пор спрашивают на собесах, и я не понимаю, зачем

Я бы сразу с такого собеса валил бы, и не ждал бы от них оффера - искал бы другую контору

Прочитал по поводу "++" выше (и в моём примере он используется)... Я видел, что админ попросил не возвращаться к этой теме, но я хочу показать, как можно ещё гибче сделать дополнительным каррированием в предложенном решении, заодно избавившись от (ненавистного) "++" через функцию - с разворачиванием типов в комментах:
https://bit.ly/2Gu5BgR
... вот так мы превратили "3 строчки" (ссылаюсь на слова выше) хардкода -> в 21 строчку (5 - реализация + 3 - сборка + 3 - выполнение + 10 комментов которые IDE и без них подсветит) гибко-настраиваемого getId - дублирую:
const getId = (init: number) =>
   (next: (c: number) => number) =>
       (id: (c: number) => string) => {
           let c = init;
           return () => id(c = next(c));
} // const getId: (init: number) =>
   // (next: (c: number) => number) =>
       // (id: (c: number) => string) =>
           // () => string - inferred
const init2 = getId(2);
// const init2: (next: (c: number) => number) =>
   // (id: (c: number) => string) =>
       // () => string
const myNextInit2 = init2(c => c * 2 + 1); // c => c + 1 - no "++"
// const myNextInit2: (id: (c: number) => string) =>
   // () => string
const myIdNextInit2 = myNextInit2(c => prefix_${c}_postfix);
// const myIdNextInit2: () => string
console.log(myIdNextInit2());
console.log(myIdNextInit2());
console.log(myIdNextInit2());

Andrei Kurosh:
ФП, которое мы заслужили - с каррированием по самое не балуй и при этом с сайд-эффектами

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪:
Энкапсулированными - не надо путать - никто к внутреннему состоянию прямого доступа не имеет - а вы думали как пишется трамплины? - через цикл while. Теми же генераторами больше кода реализовывать
если каррировать, то лучше на Хаскеле
источник
2020 September 08

m

mg901 in ФП
@cblp_su подскажи плиз, актуальны ли SOLID паттерны для FP? или есть алтернативы?
источник

JS

Jerzy Syrowiecki in ФП
mg901
@cblp_su подскажи плиз, актуальны ли SOLID паттерны для FP? или есть алтернативы?
не понял, почему ко мне, но
1. в основном, актуально.
2. полностью актуально для языков с ФП + ООП
источник

m

mg901 in ФП
Jerzy Syrowiecki
не понял, почему ко мне, но
1. в основном, актуально.
2. полностью актуально для языков с ФП + ООП
потому, что в основном от тебя адекватные ответы приходят
источник

JS

Jerzy Syrowiecki in ФП
половина паттернов GoF почти не нужны в ФП
источник

JS

Jerzy Syrowiecki in ФП
а SOLID — это скорее инженерные принципы, нежели паттерны. они с написанием кода напрямую не связаны
источник

m

mg901 in ФП
Jerzy Syrowiecki
половина паттернов GoF почти не нужны в ФП
что есть GoF? Банда четырёх?
источник

JS

Jerzy Syrowiecki in ФП
mg901
что есть GoF? Банда четырёх?
да
источник

JS

Jerzy Syrowiecki in ФП
хотя по-разному

S SRP[5]
Принцип единственной ответственности (single responsibility principle)
Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.

общий принцип, если заменить "класс" на "модуль"

O OCP[6]
Принцип открытости/закрытости (open–closed principle)
«программные сущности … должны быть открыты для расширения, но закрыты для модификации».

общий принцип

L LSP[7]
Принцип подстановки Лисков (Liskov substitution principle)
«объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы». См. также контрактное программирование.
Наследующий класс должен дополнять, а не изменять базовый.

зависит от языка. в Хаскеле не имеет смысла. в Окамле и Скале вообще не работает, там вместо этого есть ко/контра-вариантность в языке

I ISP[8]
Принцип разделения интерфейса (interface segregation principle)
«много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения»[9].

общий принцип

D DIP[10]
Принцип инверсии зависимостей (dependency inversion principle)
«Зависимость на Абстракциях. Нет зависимости на что-то конкретное»[9].

общий принцип
источник

m

mg901 in ФП
Спасибо
источник

m

mg901 in ФП
Посоветуйте пожалуйста литературу по SOLID
источник