
Klei
11.06.2018
10:52:26
@Kleidemos У тебя есть на примете хорошие материалы про акку?
Akka.net Bootcamp. Но там пример только для Akka.FSharp. Я решил курс на Akkling, но щас могу сказать, что некоторые элементы надо переделать. На гитхаб не заливал.
Доки Akka.net я не понимаю, по крайней мере до того момента, когда пойму из другого места. Но это не показатель, т.к. давно я не высыпался.
Ну и скорее всего я для своих сделаю экскурс в Akka, правда стандартная для меня манера подачи не предполагает публикацию в общий интернет. Если будет актуально, могу потом в приватах скинуть текстовые наработки.

Evgeniy
11.06.2018
11:13:13

Friedrich
11.06.2018
11:13:37
Это про тот Forge, который управляет проектами и солюшенами?

Evgeniy
11.06.2018
11:13:42
Сейчас все нормально работает через dotnet cli.

Google

Evgeniy
11.06.2018
11:13:53

Ayrat
11.06.2018
11:22:52
Щас бы я многое переделал, но и так неплохо, а главное работает збс
Не нужно пользоваться Forge.
+1 проще свой темплит для dotnet new сделать, благо это элементарно нынче, чем Forge, который устарел и делает 100500 ненужных вещей.

Mikhael
11.06.2018
12:00:25
Окей спасибо за ответы

Ayrat
11.06.2018
12:32:51

Mikhael
11.06.2018
12:34:07
пробовал - не работает , требует 4.6.1 - там еще куча каких=то мутных зависимостей

Ayrat
11.06.2018
12:34:35
Сделай dotnet restore после этого

Mikhael
11.06.2018
12:35:06
попробую. спасибо

Ayrat
11.06.2018
12:36:34
А, там paket же. Зайди в paket.dependecies и посмотри стоит ли там framework: auto-detect или конкретный. Если конкретный - поменяй. После сделай paket install чтобы он обновил лок файл с новыми версиями для нового фреймворка. Ну и все

Mikhail
11.06.2018
12:40:06
Привет! Кто нибудь работал с elmish? Не могу понять, как с помощью Cmd можно делать сайд эффекты, если функция update должна быть чистой

Ayrat
11.06.2018
12:42:11
Кому должна?) делай сайд эффекты

Igor
11.06.2018
12:43:35

Google

Mikhail
11.06.2018
12:44:06

Igor
11.06.2018
12:45:03

Ayrat
11.06.2018
12:45:06

Igor
11.06.2018
12:47:37
Ну так это же как в хаскеле IO
Тоже отложенный сайд-эффект, там это считается чистым

Friedrich
11.06.2018
12:47:39

Mikhail
11.06.2018
12:48:49

Ayrat
11.06.2018
12:48:49

Igor
11.06.2018
12:49:02

Ayrat
11.06.2018
12:49:24

Friedrich
11.06.2018
12:49:49
Так, ну давайте разберёмся, что такое промис.

Igor
11.06.2018
12:49:49

Ayrat
11.06.2018
12:51:27
Я глубоко в эту сторону не копал

Friedrich
11.06.2018
12:51:59
Ну, кароч, при правильном обращении этот 'a -> Promise — это аналог IO Promise
Кажется чистым.

Igor
11.06.2018
12:52:10

Friedrich
11.06.2018
12:52:26
Ты, конечно, можешь сразу создать промис, его зашедулить, и сделать функцию, которая вернёт заранее созданный промис, тем самым нарушив чистоту.

Google

Ayrat
11.06.2018
12:52:45

Friedrich
11.06.2018
12:52:48
Но, кажется, это не является предполагаемым вариантом использования. В теории там чисто, но ты можешь чистоту сломать.

Mikhail
11.06.2018
12:53:51

Friedrich
11.06.2018
12:54:01
Вот ты написал putStrLn "xxx" — что сделалось?

Ayrat
11.06.2018
12:54:26

Friedrich
11.06.2018
12:54:33

Mikhail
11.06.2018
12:54:40

Friedrich
11.06.2018
12:54:56

Ayrat
11.06.2018
12:55:11
Вывелось?
В ду нотации выведется, а так будет IO

Friedrich
11.06.2018
12:55:31
Для того, чтобы вообще что-то сделать, ты должен экземпляр IO отдать в некий «рантайм», который по сути является интерпретатором IO-экшенов.
Любая программа на Haskell — это чистая функция, которая создаёт большой IO-экшен. Она никогда сама по себе никаких побочных эффектов не делает. Она в функции main этот экшен конструирует, а дальше его выполняет рантайм (который не является чистым).
Такая вот там идеология.

Mikhail
11.06.2018
12:56:52
Ого, я кажется понял. Спасибо!

Friedrich
11.06.2018
12:57:07
Вы можете другую интерпретацию предложить, конечно, но моё видение, вроде бы, близко к официальному.
В F# (или, например Scala) всё совсем не так, и ты можешь выполнять побочные эффекты где угодно, тебе не нужен никакой рантайм. Но чуваки, которые убиваются по «чистому ФП», так делать не любят, и поэтому всё равно делают некую точку выхода в рантайм. А весь свой код оставляют чистым и без побочных эффектов. И функция вида 'a -> Promise как раз очень похожа по сигнатуре на эдакий «IO для бедных».

Igor
11.06.2018
13:09:10
F# кстати с этой точки зрения Async правильнее задизайнены, как () -> Task, те они ленивые и переиспользуемые.
В отличие от C# Task и даже изкоробочных Scala Future

Friedrich
11.06.2018
13:10:51
Я раньше об этом почему-то не задумывался.

Mikhail
11.06.2018
13:16:42
А для чего сделали Async? Чем он от тасков отличается? Где об этом лучше почитать?

Google

Vlad
11.06.2018
13:18:03

Bonart
11.06.2018
13:36:15

Friedrich
11.06.2018
13:36:41

Bonart
11.06.2018
13:37:05
"Случаи бывают всякие"(с)

Evgeniy
11.06.2018
13:39:48

Bonart
11.06.2018
13:40:12
Иллюстрация кривизны вывода типа в C#
public static NotNull<T> ToNotNull<T>(this T value) where T: class => TryCreate(value, out var result) ? result : throw new ArgumentNullException();
public static NotNull<T> ToNotNull<T>(this T? value) where T : struct => TryCreate(value, out var result) ? result : throw new ArgumentNullException();
Для nullable компилятор не сможет определить правильную перегрузку.

Mikhail
11.06.2018
13:40:36

Bonart
11.06.2018
13:41:49

Mikhail
11.06.2018
13:42:03

Friedrich
11.06.2018
13:42:04

Bonart
11.06.2018
13:42:23
Мало того, незапущенную задачу удастся запустить только однажды

Friedrich
11.06.2018
13:42:29

Bonart
11.06.2018
13:43:11
Скомпилить методы можно, а использовать по прямому назначению низзя

Evgeniy
11.06.2018
13:45:05

Bonart
11.06.2018
13:48:17
http://tomasp.net/blog/csharp-fsharp-async-intro.aspx/ - про разницу моделей асинхронности в C# и F#

Mikhail
11.06.2018
13:51:27

Mikhael
11.06.2018
16:15:40

Ayrat
11.06.2018
16:17:52

Google

Roman
11.06.2018
16:48:26
Привет!

Evgeniy
11.06.2018
16:51:38

Roman
11.06.2018
16:51:43

Evgeniy
11.06.2018
18:07:02
Кажется, лицензия позволяет.

Klei
11.06.2018
18:08:45
Когда у компа буду.

Mikhael
11.06.2018
18:09:34

Evgeniy
11.06.2018
19:03:15
Свежий Akkling зависит от FSharp.Core 4.5.0
?

Ayrat
11.06.2018
19:05:41
Плохо.
Хотя не, пофигу
Но это он зря

Igor
11.06.2018
19:15:06

Evgeniy
11.06.2018
19:22:14
Ну, мне пришлось явно указать версию FSharp.Core
Я плохо понимаю, как они доставляются через Microsoft.NET.Sdk