@Fsharp_chat

Страница 658 из 772
Evgeniy
04.08.2018
20:47:15
@angmarr Если я из init верну команду на загрузку данных из хранилища, это будет правильное решение?

Igor
04.08.2018
20:53:55
Вроде да

Evgeniy
04.08.2018
20:54:03
Отлично, спасибо.

Google
Vasily
05.08.2018
06:17:41
@angmarr Если я из init верну команду на загрузку данных из хранилища, это будет правильное решение?
Кстати, да, мне тоже показалось в коде странным прибитый гвоздями сторедж

Vasily
05.08.2018
06:31:14
Что значит "прибитый"?
Ну если ты захочешь, например, пообщаться с базой, изменение займет больше времени, чем хочется

Vladimir
05.08.2018
06:36:27
Почитай вот эту серию постов: http://blog.ploeh.dk/2017/10/04/from-design-patterns-to-category-theory/
Как раз вчера закончил читать, честно говоря полезного там немного. Это скорее введение в термины хаскеля для дотнетчиков)

Vasily
05.08.2018
06:36:35
Что ж вы за архитектурные астронавты. :)
Я не астронавт, иногда просто в стратосферу приходится нырять

Evgeniy
05.08.2018
06:50:12
Если я захочу пообщаться с базой, то буду делать это через сервер. А это совсем другая история.

Оверинжинирить сейчас смысла не вижу.

Friedrich
05.08.2018
08:00:03
Как раз вчера закончил читать, честно говоря полезного там немного. Это скорее введение в термины хаскеля для дотнетчиков)
А мне прям очень понравились эти статьи, я упорядочил своё понимание некоторых концепций.

Vladimir
05.08.2018
08:23:36
Ну, они интересные, концепции хорошо расписаны. Только не очень понятно что теперь с этим всем делать, так что практическая польза небольшая на мой взгляд

Google
Vladimir
05.08.2018
08:27:08
Не хватило вывода типа, вот я знаю что такое моноиды, семигруппы и магмы, теперь я могу — ....

Klei
05.08.2018
11:35:45
Кто-нибудь знает, как в Akka/Akkkling из актора, который примет сообщение 'a и сдохнет, сделать Async<'a>?

Ну или из актора, который отправит одно сообщение и сдохнет.

Vasily
05.08.2018
12:31:27
Не получится так

Точнее, есть ask

Но он медленный

Vladimir
05.08.2018
15:41:57
Берёшь и рефакторишь свои интерфейсы в функторы или во фри, лол :)
там такого не было написано) написано наоборот, что хочешь так хочешь так, без разницы

В первую очередь это нужно для общения. :)
тут согласен) поэтому и не очень одобряю это новичкам в фшарпе давать

Roman
06.08.2018
02:00:53
Берёшь и рефакторишь свои интерфейсы в функторы или во фри, лол :)
есть мнение, что фри монады на фшарпе - так себе идея https://stackoverflow.com/a/51262899/6198294

Ayrat
06.08.2018
04:57:51
Поддерживаю.
Плюсую трижды. Не делайте так, люди.

アレクセイ
06.08.2018
05:26:35
That TurtleProgram code you linked to was just an experiment -- I would not recommend using Free for real code at all.

Блин как раз недавно читал и думал: так вот как надо делать! А оно не так ?

Evgeniy
06.08.2018
05:29:29
Блин как раз недавно читал и думал: так вот как надо делать! А оно не так ?
Только не в F#. Есть языки, где этот паттерн хорошо себя зарекомендовал.

Mikhail
06.08.2018
05:36:27
А как тогда лучше сделать DSL? Просто интерпретатор, без фри монады?

Vasily
06.08.2018
05:42:26
Google
Evgeniy
06.08.2018
05:43:23
Можно на билдерах,они же computation expressions
Синтаксис -- это дело второе.

Кто-то должен написать серию статей про идиоматичный F#. :)

Кто-то должен написать серию статей про идиоматичный F#. :)
Тут немного есть, конечно. https://docs.microsoft.com/en-us/dotnet/fsharp/style-guide/conventions

Но это мелочи.

Doge
06.08.2018
06:16:26
есть мнение, что фри монады на фшарпе - так себе идея https://stackoverflow.com/a/51262899/6198294
Я не соглашусь с аргументами про то, что это так себе идея. Имхо, важная часть, что free, что того же tagless final - это возможность очистить бизнесовую логику от инфраструктурных эффектов вроде того же async и тем самым лучше разделить слои приложения друг от друга. А это ценно, что в F#, что где-нибудь ещё

Doge
06.08.2018
06:19:13
так интерпретатор в помощь. Там же речь про то, что фри монады - слишком много бойлерплейта и когнитивной нагрузки
Интерпретатором ты именно от эффектов зависимость не уберешь. (В F# конкретно)

Ценно, но в F# лучше так не делать.
Ну а аргументация какая против?

Evgeniy
06.08.2018
06:19:43
Ну а аргументация какая против?
Сложно писать, сложно поддерживать.

Doge
06.08.2018
06:20:07
Сложно писать, сложно поддерживать.
Сложно только из-за того, что реализацию каждый раз свою писать?

Bonart
06.08.2018
06:20:58
Сложно только из-за того, что реализацию каждый раз свою писать?
Я думаю, что есть простой способ опровержения - написать на фримонадах то, что поддерживать легко.

Roman
06.08.2018
06:21:02
еще каждый раз объяснять новому разработчику концепт фри монады)

Bonart
06.08.2018
06:21:13
Если, конечно, опровержение вообще существует ;)

Bonart
06.08.2018
06:21:45
еще каждый раз объяснять новому разработчику концепт фри монады)
При легкой поддерживаемости это не нужно. ООП понимает ноль целых хрен десятых процента

Evgeniy
06.08.2018
06:22:48
И это тоже.
Для паттерна, что в других языках получается for free, в F# нужно придумывать целый рецепт. http://blog.ploeh.dk/2017/08/07/f-free-monad-recipe/

Bonart
06.08.2018
06:22:52
давай начнём с монады)))
С монадой кстати более-менее просто. Спасибо LINQ. SelectMany, и ToMyType() - и готово

Google
Evgeniy
06.08.2018
06:22:56
Мне не кажется, что это идиоматично и стоит использовать в F#.

Doge
06.08.2018
06:24:04
Я думаю, что есть простой способ опровержения - написать на фримонадах то, что поддерживать легко.
А что сложного в поддержке кода с фри монадами? Элементарный же паттерн

Bonart
06.08.2018
06:24:14
разверни мысль пожалуйста
Легкая поддерживаемость означает, что можно эффективно использовать широкие массы мидлов без понимания ими подкапотного механизма. С ООП именно это и произошло.

Ayrat
06.08.2018
06:24:46
А что сложного в поддержке кода с фри монадами? Элементарный же паттерн
что сложного сразу писать код на F*? элементарный же язык

Evgeniy
06.08.2018
06:24:56
Господа, идите во флудилку, пожалуйста.

Ayrat
06.08.2018
06:25:57
Легкая поддерживаемость означает, что можно эффективно использовать широкие массы мидлов без понимания ими подкапотного механизма. С ООП именно это и произошло.
ты выше написал "ООП понимает ноль целых хрен десятых процента". Ты имеешь в виду что само глубинное понятие ООП понимает почти никто, но пользоваться его продуктами (паттернами) может любой CRUD-о писатель?

Doge
06.08.2018
06:26:05
что сложного сразу писать код на F*? элементарный же язык
Он с .net толком не интегрируется. А так да, не очень сложный сам по себе.

Bonart
06.08.2018
06:27:19
ты выше написал "ООП понимает ноль целых хрен десятых процента". Ты имеешь в виду что само глубинное понятие ООП понимает почти никто, но пользоваться его продуктами (паттернами) может любой CRUD-о писатель?
Примерно так. Это не значит, что люди понимающие глубже не нужны. Но прикладнуху ( и довольно сложную) могут ваять вполне обычные мидломассы

Ayrat
06.08.2018
06:28:27
Он с .net толком не интегрируется. А так да, не очень сложный сам по себе.
Не очень сложный для кого? Есть мнение что ты вещаешь со своей колокольни, пытаясь натянуть сову на глобус. Сове больно сейчас. Люди не хотят учить леммы для написания блого движков или интернет-магазинов. А это 90% рынка

Doge
06.08.2018
06:30:32
Не очень сложный для кого? Есть мнение что ты вещаешь со своей колокольни, пытаясь натянуть сову на глобус. Сове больно сейчас. Люди не хотят учить леммы для написания блого движков или интернет-магазинов. А это 90% рынка
Например, в скала сообществе относительно широко начинают использовать free или tagless final сейчас и в вполне бизнесом коде и в вполне крупных проектах. При этом не сказать, что там для их использования нужно меньше каких-то знаний. Так что, если для них не очень сложный, то и для F# сообщества не очень сложный, имхо.

Bonart
06.08.2018
06:32:13
Это не в скале язык сознательно делится на две части - для быдла и библитекарей?

Doge
06.08.2018
06:32:33
И современный идиоматичный ФП скала код ты без отключения части этих варнингов все равно не напишешь

Igor
06.08.2018
06:39:00
Например, в скала сообществе относительно широко начинают использовать free или tagless final сейчас и в вполне бизнесом коде и в вполне крупных проектах. При этом не сказать, что там для их использования нужно меньше каких-то знаний. Так что, если для них не очень сложный, то и для F# сообщества не очень сложный, имхо.
Имхо это все от лени (конечных юзеров). Вместо того что бы правильно структурировать программы (отделяя эффекты), проще бахнуть императивное месиво из логики и эффектов, а потом все это “интерпретировать”.

Igor
06.08.2018
06:40:56
Ну такое себе способ, а потом у тебя эти фри по всей программе

Doge
06.08.2018
06:41:23
Да, это можно и явно сделать, но тогда достаточно много данных придется именно что явно по коду протаскивать туда-сюда

Что во многих случаях будет отвлекать от самой бизнес-логики

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

Google
Vladimir
06.08.2018
09:04:08
Что-то обновил TaskBuilder до 2.0 и поломался жираф, никто еще не столкнулся?

An unhandled exception has occurred while executing the request. System.MissingMethodException: Method not found: 'TaskBuilder FSharp.Control.Tasks.ContextInsensitive.get_task()'. at Giraffe.Middleware.Invoke@39-1.Invoke(FSharpOption`1 _arg1) at FSharp.Control.Tasks.TaskBuilder.StepStateMachine`1.nextAwaitable() in D:\src\TaskBuilder\TaskBuilder.fs:line 38

Friedrich
06.08.2018
09:05:15
Мб обнови жираф тоже? Были проблемы, но их пофиксили же?

Vladimir
06.08.2018
09:05:49
жираф уже почти полгода без апдейтов =( на 1.2.0-rc работает

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

Вообще говоря странный паттерн - поднять версию нейспейсов) хотите новую версию либы - переписывайте у себя код

Friedrich
06.08.2018
09:31:14
Человек старается сделать, чтоб ни у кого совместимость не поломалась, всё ок.

Ну, там был косяк с жирафом и это не ок, но мне казалось, что всё починили.

Vladimir
06.08.2018
09:41:53
Погодь, в старом неймспейсе остался старый код
похоже что слишком старый) жираф ориентируется на 1.2.0-rc, а 2.0 c ним уже не совместим

Friedrich
06.08.2018
09:42:13
Да как так-то!

В 2.0 новый код просто вынесен в неймспейс.

Vladimir
06.08.2018
09:42:50
новый относительно чего?)

может относительно 1.0?

я в общем, захардкодил себе 1.2.0-rc пока, сейчас создам ишуй в жирафе, может кто возьмется фиксить

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

Страница 658 из 772