
Roman
10.03.2017
09:57:55
а не, это я протупил) не заметил _ символ

Igor
10.03.2017
11:09:52
А есть какие-то (эмпирические) правила когда надо ставить типы параметров?

Vasily
10.03.2017
11:21:44
Когда не компилируется, по идее

Igor
10.03.2017
11:37:21

Google

Vasily
10.03.2017
11:38:46
По идее,в больших проектах надо всегда ставить
Для облегчения понимания

Friedrich
10.03.2017
11:54:36
Я обычно ставлю типы для всех функций, которые за пределами модуля видны.

Roman
10.03.2017
14:22:47
Товарищи, есть тут кто знакомый с beam или с Core erlang?
https://github.com/fabrizioschiavi/pragmatapro отличный шрифт
и firaCode еще https://github.com/tonsky/FiraCode

Igor
10.03.2017
15:48:14

Roman
10.03.2017
15:48:16
https://www.visualstudio.com/ru-ru/news/releasenotes/vs2017-relnotes ctrl + f f#

Evgeniy
10.03.2017
17:54:36
https://github.com/Microsoft/visualfsharp/pull/2574

Igor
10.03.2017
17:59:41
А мы и не знали https://i.gyazo.com/c3dd10a4b9ee2bc7b141bf807979e4a1.png

Roman
10.03.2017
18:02:37

Google

Roman
10.03.2017
18:05:29

GNU/Patchouli
11.03.2017
09:33:46
Fira Code шикарен

Friedrich
11.03.2017
09:34:32
https://github.com/kika/fixedsys — я олдскульщик и вот этот шрифтец юзаю :3

Evgeniy
11.03.2017
10:48:34
А у меня Consolas обыкновенный.

Friedrich
11.03.2017
10:49:11
"Консолас обыкновенный" звучит как отрывок из заметок натуралиста.

Evgeniy
11.03.2017
10:49:20
:3

GNU/Patchouli
11.03.2017
10:51:08
Лел

Evgeniy
11.03.2017
13:14:26
Кто какие фичи из 4.1 уже попробовал?

Igor
11.03.2017
13:24:55

Friedrich
11.03.2017
16:51:56
0___0

Anton
11.03.2017
20:22:04
Я тоже юзаю fira code

Evgeniy
12.03.2017
11:31:23
Жалко, что обычные кортежи в F# по умолчанию не struct.
Эта приписка struct не очень красиво выглядит. :(
А теперь никуда не денешься -- обратная совместимость.

GNU/Patchouli
12.03.2017
11:43:43

Evgeniy
12.03.2017
12:01:31
https://github.com/fsharp/fslang-design/blob/master/RFCs/FS-1030-anonymous-records.md

Roman
12.03.2017
13:40:07
Этого иногда оч не хватало.

Google

Evgeniy
12.03.2017
15:11:16
@neftedollar Ну, при инициализации, в типах, в паттернах надо struct расставлять.

Roman
12.03.2017
15:11:39

Igor
14.03.2017
10:41:25
Привет, как можно это код проще написать (без Async.AwaitTask)?
async {
let! me = Async.AwaitTask(bot.GetMeAsync()) // C# 'Task<User> bot.GetMeAsync()'
printfn "%O" me
}

Vasily
14.03.2017
10:42:14
Async.AwaitTask
Тьфу
Проще вряд ли

Igor
14.03.2017
10:42:51
Может можно какой-то оператор свой написать?

Friedrich
14.03.2017
10:42:55
Мне тоже кажется, что проще уж не напишешь, если не впадать в крайности (и не навешивать Then, например).
Ой, или как его, ContinueWith
А какой тебе тут оператор нужен, что ты хочешь им делать?

Igor
14.03.2017
10:43:54

Friedrich
14.03.2017
10:44:01
Я думаю, что можно попробовать написать свой computation expression для Task (а не для Async), но гемор лишний имхо.
Или даже обзови функцию await, будет веселуха.
let! me = await (bot.GetMeAsync()) — красота, а?

Vasily
14.03.2017
10:45:26
let waitTask=Async.AwaitTask

Friedrich
14.03.2017
10:46:14
let waitTask=Async.AwaitTask
Интуиция подсказывает мне, что тут недостаёт либо inline, либо <_>. Обычно такие псевдонимы просто так не компиляются.

Vasily
14.03.2017
10:46:26
А, да
Тут резолв типа не сработает

Friedrich
14.03.2017
10:46:46
Ну ладно, считай что мы тебя поняли :)

Google

Vasily
14.03.2017
10:49:20
Но в целом это пример того, что интероп F# с C# пока не очень :)

Friedrich
14.03.2017
10:50:27
Да ладно, тут всё норм.
Это интероп Task и Async не очень, да и то ещё под вопросом.
Если сильно хочется, можно такой же flow написать для Task<T>, и всё будет зошибись.

Vasily
14.03.2017
10:51:35
СКажем так, если хочется наружу из F# либы выдать интерфейс, похожий на C# придется поотжиматься

Friedrich
14.03.2017
10:54:31
Да я не сказал бы, что это особо проблематично. Сам такие либы всю дорогу делаю :)
Просто не выставляешь наружу туплей, каррированных функций и Async заворачиваешь в Task. Ну и с нугетом немножко упражняешься, чтоб FSharp.Core оттудова подтягивался.
Да, код, который в публичном C#-совместимом слое, смотрится немного чужеродно (потому что я ещё и конвенции именования в нём соблюдаю). Но ничего критичного, на самом-то деле.

Roman
14.03.2017
10:56:25
Тоже монадки выражение. Работает с c# тасками

Friedrich
14.03.2017
10:56:53
О, прекрасно.

Igor
14.03.2017
10:57:04

Roman
14.03.2017
10:58:38
As you wish) хотя да я бы в стандартную либу уже включил и работу с тасками.

Friedrich
14.03.2017
10:59:12
Мусорная либа получится. И async, и task, которые делают одно и то же :(
По-хорошему бы тогда уж async выпилить или как-то заинтегрировать их оба вместе. Но язык так не умеет :(

Roman
14.03.2017
11:00:24
Да, хотя для .net core это не проблема. Там и так тянутся куча либ и заменить например async либу на task либу было бы не плохо, но они скорее всего сами и так и так в зависимости подтянутся.
А task {} это один файлик

Igor
14.03.2017
11:23:59
Все больше погружаюсь в интеропт с C# - возникла очередная проблема.
Как в F# идиоматично подвесится на C# событие
public event EventHandler<MessageEventArgs> OnMessage;
VSforMac предлагает юзать add_OnMessage ...

Friedrich
14.03.2017
11:42:41
А, хотя постой, EventHandler<T> это же с двумя аргументами?

Google

Igor
14.03.2017
11:43:33

Friedrich
14.03.2017
11:45:32
А, не, это на F#-события можно удобно подписаться. С такими придётся страдать :(

Igor
14.03.2017
11:46:09

Friedrich
14.03.2017
11:46:14
Но ты попробуй Event.add на всякий случай.
По-моему, с какими-то событиями это работало — хотя я щас не смог найти в документации, с какими именно.

Vasily
14.03.2017
11:47:51
[<CLIEvent>]
https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events

Friedrich
14.03.2017
11:48:21
Не, [<CliEvent>] это в другую сторону — если ты C#-событие хочешь выставить.

Vasily
14.03.2017
11:49:05
let form = new Form(Text = "F# Windows Form",
Visible = true,
TopMost = true)
form.MouseMove
|> Event.filter ( fun evArgs -> evArgs.X > 100 && evArgs.Y > 100)
|> Event.add ( fun evArgs ->
form.BackColor <- System.Drawing.Color.FromArgb(
evArgs.X, evArgs.Y, evArgs.X ^^^ evArgs.Y) )

Igor
14.03.2017
11:49:06
[<CLIEvent>]
У меня стороная C# библиотечка с евентами, на которые нужно подписаться.

Friedrich
14.03.2017
11:49:32
Во, вот да, Event.add работает.

Vasily
14.03.2017
11:55:55
Но я бы обертку сделал все же на стрим событий

Igor
14.03.2017
12:01:56

Roman
14.03.2017
12:33:41

Igor
14.03.2017
12:40:08
Вот такое не работает разве? @angmarr
Я же написал что работает, только ide ошибку подсвечивает,
но все компилируется и это главное (мы же знаем какой в F# тулинг, особенно за пределами VS)

Roman
14.03.2017
12:40:40