@haskellru

Страница 818 из 1551
Dmitry
07.02.2018
15:52:44
да

ну и haskell considered harmul

потому что мы все близки к тому, что бы вместо решения задач бизнеса свалиться в пропасть circular jerking

Александр
07.02.2018
15:53:25
haskellers considered harmful

Google
Dmitry
07.02.2018
15:53:40
по краю ходим, я бы сказал

Denis
07.02.2018
15:53:55
Александр
07.02.2018
15:54:14
потому что мы все близки к тому, что бы вместо решения задач бизнеса свалиться в пропасть circular jerking
Зависит от бизнеса. В больших проектах без Inversion of Control и инжектирования зависимостей трудно обойтись.

Dmitry
07.02.2018
15:54:36
это не на языке бизнеса сказано

Mikhail
07.02.2018
15:54:52
Не веду таких
Надо завести X considered harmful

Александр
07.02.2018
15:55:29
Вот о чем бы я десять раз подумал, - так это "поднимать ли бизнес-логику в типы, когда можно сделать Free-DSL". И выбор здесь явно не в пользу типов

Dmitry
07.02.2018
15:56:23
ну я повторю вопрос - мы видим типы для инвойсов в гисте

Denis
07.02.2018
15:56:33
Все что вы с фри делаете в своих дсл прекрасно делается без фри.

Dmitry
07.02.2018
15:56:58
можно пример применения этих типов с пояснениями (где тут зависимость от контекста и пресловутые IoC и DI)

еще раз спрошу - на самом деле меня вот этот вот IoC вызывает легкую тошноту

Denis
07.02.2018
15:57:12
Это. Способ. Получить. Инстанс. Монады.

Dmitry
07.02.2018
15:57:24
да чего б его не написать то?

теперь про IoC

Google
Dmitry
07.02.2018
15:57:40
тьюринг-полные конфиги - это IoC ?

строенный в программу скриптинг - это IoC ?

Denis
07.02.2018
15:57:54
еще раз спрошу - на самом деле меня вот этот вот IoC вызывает легкую тошноту
Это как передачу аргумента называть dependency injection, на мой вкус.

Александр
07.02.2018
15:58:31
Все что вы с фри делаете в своих дсл прекрасно делается без фри.
Любую задачу можно решить несколькими способами. Но не любое решение помогает разделить консерны и удовлетворить тем же SOLID-принципам. Free - позволяет, а также вносит и другие нужные вещи. С Free accidental complexity очень низка

Alexander
07.02.2018
15:58:48
@qnikst завтра с Мальты вернётся - спросите ещё раз

Александр
07.02.2018
15:59:01
Alexander
07.02.2018
15:59:06
а то тут с wifi не всегда хорошо и совещаний много

Dmitry
07.02.2018
15:59:13
@qnikst гражданство покупаешь, поди?

Alexander
07.02.2018
15:59:18
хаха

Dmitry
07.02.2018
16:00:25
давайте еще раз. допустим, я совсем тупой.

Alexander
07.02.2018
16:00:31
не, собрание компании

Dmitry
07.02.2018
16:00:39
встроенный в программу на си скриптинг на самодельном лиспе - это IoC ?

Александр
07.02.2018
16:00:49
можно пример применения этих типов с пояснениями (где тут зависимость от контекста и пресловутые IoC и DI)
Так там же и использование, во втором гисте, функция listInvoices, которая и есть функция, сгенерированная по языку InvoiceL. Если у компании в поле invoicing_service стоит Infakt, используется интерпретатор от Infakt. Если стоит Zoho, то интерпретатор от Zoho. А бизнес-сценарий при этом тот же самый

Mikhail
07.02.2018
16:02:53
прямо на превьюхе этот слайд

Александр
07.02.2018
16:03:34
Я не знаю как у вас, но в моем ФП нет никакого SOLID.
А очень зря, потому что у вас тогда плохой ФП

Не надо думать, что SOLID - это про ООП

Dmitry
07.02.2018
16:03:45
OO considered nothing

Александр
07.02.2018
16:04:02
Не важно, что там пишут и говорят. Принципы - универсальные

Google
Denis
07.02.2018
16:04:16
мне вот тоже не важно что пишут

и говорят

Александр
07.02.2018
16:04:33
И?

Denis
07.02.2018
16:04:50
https://vimeo.com/113588389
я как раз вот этот слайд во время разговора вспомнил, но с телефона было лень искать

Dmitry
07.02.2018
16:04:56
кто-то ответит - "внедрение языка скриптования в программу на си это пример IoC или нет" ?

Denis
07.02.2018
16:05:24
без понятия

я в буллшит бинго этом не разбираюсь

Dmitry
07.02.2018
16:05:47
потому что любая статья про IoC - это примерно два экрана словоблудия и в качестве примера - огромный xml-ный конфиг, который меняет поведение жабьей программы

Александр
07.02.2018
16:05:51
кто-то ответит - "внедрение языка скриптования в программу на си это пример IoC или нет" ?
Не очень ясен вопрос. Для IoC характерны две вещи: интерфейс и имплементация, разделенные. Клиентский код видит только интерфейс, а в рантайме туда подставляется имплементация

Dmitry
07.02.2018
16:06:24
да, а какую имплементацию возвращать решает xml-ный конфиг и абстрактная фабрика

Александр
07.02.2018
16:06:26
На самом деле, все ФП - имеет в своей природе естественный IoC. Ведь мы передаем функции в качестве зависимостей

Dmitry
07.02.2018
16:06:32
я умею в булшит бинго

Александр
07.02.2018
16:08:51
Так и что там насчет SOLID? В чем тут ООП? Есть понятие ООП-интерфейса (в Java даже ключевое слово имеется) и есть понятие интерфейса как абстракции. Не надо их путать. Поэтому в SOLID "I" применима к любой парадигме. Впрочем, как и Single Responsibility, и Open-Close, и LSP, и все остальное. Просто в интернетах подавляющее большинство авторов дальше ООП не заглядывали, и для них все эти принципы ничего другого не значат.

Dmitry
07.02.2018
16:08:57
вернемся теперь к нашим инвойсам

вот у нас есть инвойс, там есть всякое бла-бла и позиции

нам для инвойса , допустим, надо

1) посчитать total

2) сгенерировать pdf

это примеры разной обработки одной структуры данных в завимости от ?

Google
Dmitry
07.02.2018
16:11:06
просто немного напрягает, что в любом упоминании IoC он выступает как самостоятельная ценность. а не те задачи, которые он решает

Denis
07.02.2018
16:11:27
Александр
07.02.2018
16:12:07
Сгенерировать pdf - это метод для Invoice DSL. У меня такой даже есть, обращается к сервису. Посчитать total - это сценарий, так как ему требуются данные по инвойсам, которые он может получить, дергая методы DSL. Общее правила для DSL такие: - Методы должны делать только то, что нельзя выразить через другие методы; - Методы должны быть настолько абстрактными, насколько возможно; - Методы должны компоноваться настолько, насколько возможно

По сути, это все относится к любому интерфейсу

Хоть REST, хоть ООП, хоть еще какому

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

И вот как раз этих практик нам не хватает.

Dmitry
07.02.2018
16:15:22
дело в том, что часть этих практик растёт от отсутствия примитивов, которые доступны в ФЯ и типов

часть - просто следствие дизайна этих языков

Александр
07.02.2018
16:15:42
Часть - да. Паттерны те же. Но есть универсальные

Dmitry
07.02.2018
16:15:47
что-то, причем, есть вполне возможно ценное

вопрос, что

Александр
07.02.2018
16:16:17
Разделение интерфейса и реализации.

Dmitry
07.02.2018
16:16:26
делается, хотя методы спорны

Александр
07.02.2018
16:16:35
Для маленьких приложений это несущественно, а большие быстро превращаются в тыкву

Dmitry
07.02.2018
16:16:42
спорно

Александр
07.02.2018
16:16:48
Single Responsibiltiy

спорно
Вовсе нет.

Dmitry
07.02.2018
16:17:02
нормально, особенно тут хорошо тайпклассы заходят

Александр
07.02.2018
16:17:10
low coupling, high cohesion

Google
Dmitry
07.02.2018
16:17:13
ну, большие приложения в тыкву превращаются без модульности

а модульность может достигаться разными способами

Александр
07.02.2018
16:18:08
Модульность - это важно. Но этого недостаточно для приложения, общающегося с внешним миром.

Александр
07.02.2018
16:18:43
В clojure есть прекрасный принцип, примерно такой: - First, program with data - Second, program with functions

То есть, если можно - программируем данными

Если нет - функциями

Dmitry
07.02.2018
16:19:20
@kana_sama а еще есть мнение, что если этот инвойс - просто ADT, то всё это достигается без применения клеточек из буллшит бинго, а просто обходом этого ADT

Denis
07.02.2018
16:19:29
правда в кложе это превращается в жонглирование хешмапами

Александр
07.02.2018
16:19:49
про тотал: если его делать сценарием, то нужно в dsl делать ряд геттеров, а есть такое мнение, что геттеры и сетеры - ересь, поэтому total может уехать в api
Каких геттеров? Дергание методов, обращающихся за инвойсами в сервис - не есть геттер. Такой метод вернет просто ADT Invoice, и все данные доступны

Нету никаких геттеров в смысле ООП

Dmitry
07.02.2018
16:20:14
сеттеры. геттеры

Александр
07.02.2018
16:20:21
правда в кложе это превращается в жонглирование хешмапами
Да, но не единственная реализация принципа

Dmitry
07.02.2018
16:20:28
я точно всё еще в чате про хаскель?

kana
07.02.2018
16:20:46
ну окей, пусть total считается с неким коэфицентом, который зависит от интерпретатора

Александр
07.02.2018
16:20:48
Нету никаких геттеров и сеттеров. Но в Haskell как таковом они есть в виде линз

kana
07.02.2018
16:21:10
в total у нас будет геттинг этого коэфицента из api

Dmitry
07.02.2018
16:21:11
линзы это просто сахар

Александр
07.02.2018
16:21:20
ну окей, пусть total считается с неким коэфицентом, который зависит от интерпретатора
Э-э, нет, вот еще одно правило для интерпретатора: - в интерпретаторе не должно быть бизнес-логики

линзы это просто сахар
Сахар - это do-нотация. А линзы - это, скорее, eDSL

Dmitry
07.02.2018
16:21:58
окей. но неважно, есть он или нет

наличие линз или их отсутствие ничего не изменит.

Страница 818 из 1551