
Friedrich
08.05.2017
15:21:47
(ну и это и так понятно, ага)

Pig
08.05.2017
15:23:14
F# тоже хороший, но немножко про скрещивание ужа с ежом
Типа Scala, если писать чисто на нем все в шоколаде, но когда приходит интероп...

Google

Pig
08.05.2017
15:25:50
Кстати, а можно писать Windows-сервис без C# и разнообразных графических конструкторов?

Friedrich
08.05.2017
15:26:25
Можно!

Pig
08.05.2017
15:26:49
А как?

Igor
08.05.2017
15:27:42

Friedrich
08.05.2017
15:27:57
Во-первых, я делал вот такое на чистом фреймворке: https://github.com/ForNeVeR/Tracktor/blob/363a7eeb469a933e92b8cd1d8ae4355f3a197c71/Tracktor.Service/Program.fs#L33-L38
(см. реализацию сервиса https://github.com/ForNeVeR/Tracktor/blob/363a7eeb469a933e92b8cd1d8ae4355f3a197c71/Tracktor.Service/TracktorWindowsService.fs)
(там проект своих задач не выполняет совсем, но все запчасти рабочие, я их отлаживал)

Pig
08.05.2017
15:28:33
(Ну про котлин я наверно погорячился, но там тоже не все гладко. Я писал на нем, знаю.)

Friedrich
08.05.2017
15:28:38
А как?
...а во-вторых, посмотри на Topshelf.

Pig
08.05.2017
15:30:09
Я смотрел и до сих пор ничего не понимаю, а его фшарповая обвязка вообще без единого комментария

Friedrich
08.05.2017
15:30:52
А там есть ещё и F#-обвязка? Интересно, чем она отличается от обычной.

Pig
08.05.2017
15:31:31
Судя по коду только именами функций с маленькой буквы

Friedrich
08.05.2017
15:32:00
Нашёл сэмпл: https://github.com/haf/Topshelf.FSharp/blob/master/src/Topshelf.FSharp.Example/Program.fs

Google

Friedrich
08.05.2017
15:33:01
Ну и там чуток побольше, чем просто переименование функций, но всё равно довольно просто всё. И комментариев с документацией и правда нет :)
https://github.com/haf/Topshelf.FSharp/blob/master/src/Topshelf.FSharp/FSharpApi.fs

Evgeniy
08.05.2017
15:33:12
@DarkByte2016 Но про монады мы все равно можем позже пообщаться.

Pig
08.05.2017
15:36:16

Friedrich
08.05.2017
15:37:24
Хотя не, подожди. А кастомных методов туда не завезли?
Хотя я не уверен, обязательно ли это нужно.

Pig
08.05.2017
15:39:55
Есть много разных классов кроме Monad (MonadError/MonadFail, MonadPlus, MonadArrow), в зависимости от использованных операторов требуются разные классы.

Friedrich
08.05.2017
15:40:17
[спойлеры]
> Haskell and its extensions support monad comprehensions [13] and “do” notation for monads, idiom brackets [14] for applicatives and arrows [16]. These are similar to computation expressions in that they are not tied to concrete computations. However, they differ syntactically – they add multiple new notations, while computation expressions add a uniform notation resembling standard language structures. Adding arrows to computation expressions is an open question.

Pig
08.05.2017
15:41:18
Интересно, а где-нибудь кроме F# это есть?

Friedrich
08.05.2017
15:42:15
Я нигде не встречал. Но, с другой стороны, если у тебя в языке есть do-нотация и monad comprehensions или аналог — то, может быть, именно такое расширение тебе не особо нужно. И потому их не добавляют.

Pig
08.05.2017
15:42:58
Мне кажется я видел нечто подобное в Coq (Сорри, я не могу сейчас читать, только искать внешние сходства.)

Friedrich
08.05.2017
15:43:01
Ну т.е. выразительность поверх монад можно и по-другому сделать. Дон сделал вот так, и, вроде, нормально получилось. В других языках делают по-другому, и тоже никто не жалуется.

Igor
08.05.2017
15:48:13
Интересно, а те кто хочет монады, понимает зачем они их хотят
или просто потому что у др они есть?))

Friedrich
08.05.2017
15:49:45
Ну я вот тайпклассы хочу. И понимаю, зачем. Монад отдельно от тайпклассов — не хочу, спасибо :)

Roman
08.05.2017
15:51:15
никак не врубаюсь для чего нужны монады(
Ещё один вариант использования монад - это абстракция на фоннеймоновской архитектурой, в Haskell вроде cell называется в f# реализована как ref(хот яхт в f# это полноценная монада или нет)

Igor
08.05.2017
15:52:11

Friedrich
08.05.2017
15:52:46
Ты ж понимаешь, что это просто пример такой удачный попался, что он просто реализуется на F#. А шаг влево-вправо — и он сломается. Например, если там вместо b - 1 было бы b - 500.

Google

Pig
08.05.2017
15:53:29
Есть мнение что для IO достаточно корекурсии, но насколько оно авторитетно я пока не могу оценить)

Igor
08.05.2017
15:54:23

Friedrich
08.05.2017
15:54:40
А я даже пример показывал! :)

Pig
08.05.2017
15:54:43

Igor
08.05.2017
15:55:18

Friedrich
08.05.2017
15:55:40
Это обычный, простой серверный код, без выпендрежа.

Pig
08.05.2017
15:56:57
Можно написать библиотеку и нигде не указать конкретный тип для обработки ошибок
Хочешь в Either клади, хочешь в Maybe, хочешь ещё во что

Friedrich
08.05.2017
15:57:30
Тоже верно.

Pig
08.05.2017
15:59:07
Полиморфные константы опять же.

Igor
08.05.2017
15:59:08
А вспомнил, я хотел тайп классы что бы отказаться от OOP интерфейсов/наследования/override/virtual methods
и писать строго функциональный код как в haskell.
Так что я тоже за type class (но не за монады).

Friedrich
08.05.2017
16:00:22
Тут стоит вспомнить, что по заветам Сайма не чисто функциональным кодом единым жив F#. А, так сказать, прагматичной связкой ООП и ФП.

Evgeniy
08.05.2017
16:13:59
Для инженеров.
Недавно в слэке инженеров вспоминали, в разговоре о HKT.
Говорят, когда самолеты конструируют, то инженеры проводят сложные математические расчеты. А к программистам требования поменьше, и многие боятся современных математики и computer science.
Кажется, в том обсуждении пропустили, что сложные не означает абстрактные.

Friedrich
08.05.2017
16:21:16
(я тоже их боюсь)

Igor
08.05.2017
16:22:43

Evgeniy
08.05.2017
16:23:21
Я про другое.

Google

Evgeniy
08.05.2017
16:24:16
Инженеры очень мало используют современной математики.
У них вполне понятный набор абстракций.

Igor
08.05.2017
16:24:58
Я про другое.
Ну я и про то что “ сложные математические расчеты… и computer science.” на самом деле нужен только готовый в библиотечках.
А для практической разработки это не нужно. Ну да ок, это мое imho.

Evgeniy
08.05.2017
16:26:03
Под "современных математики и computer science" я имел в виду теории типов, категорий и прочу абстракную алгебру.
Это попытка сравнить то, что используют инженеры и программисты. Не конкретно, а по сути.
У программистов вполне понятные абстракции — это, например, функции, модули, ADT, параметрический полиморфизм. Этого даже много, но уровень абстракции не очень высокий. И на этом можно строить сложные программы.
У инженеров — это, наверное, трехмерное пространство, дифференцируемые функции, какие-нибудь сплайны, сетки для численных расчетов. Тоже ничего сложного, PhD не нужно для этого.
И на этом можно строить сложные расчеты.

Admin
ERROR: S client not available

Igor
08.05.2017
16:35:00

Evgeniy
08.05.2017
16:36:57
@angmarr F# неинтересен с точки зрения современных CS и математики.
И не думаю, что станет.
Но и немного любви со стороны, например, C# программистов ему не помешало бы. :)
Ладно. Что-то меня не туда завернуло.

Илья
08.05.2017
16:54:01
Может тут кто нибудь знает. При вызове Console.SetCurrentPosition(0, 0) выдает System.ArgumentOutOfRangeException: Value must be positive and below the buffer width.
Что в C# что в F#
Mono то везде один и тот же))

Igor
08.05.2017
16:55:14

Илья
08.05.2017
16:55:23
.NET Core?

Google

Илья
08.05.2017
16:55:49
У меня арч. Тут он не работает.

Evgeniy
08.05.2017
16:57:25
@DarkByte2016 SetCursorPosition?

Илья
08.05.2017
17:00:11

Evgeniy
08.05.2017
17:00:33
@DarkByte2016 У тебя названии метода нет опечатки?

Илья
08.05.2017
17:00:49
пардон Console.SetCursorPosition
ну не суть

Igor
08.05.2017
17:01:41

Илья
08.05.2017
17:04:26
че-то баг от 2009 года и до сих пор не исправлен
печалька

Evgeniy
08.05.2017
17:09:05
@DarkByte2016 Этот баг починили.

Илья
08.05.2017
17:09:26

Evgeniy
08.05.2017
17:09:31
Видимо, проблема в чем-то другом.

Илья
08.05.2017
17:11:08
Вау! Кажется до меня дошло!!! Проблема была в том что я запускал код из Rider. А там своя консоль. Видимо там эта штука не пашет. А вот из обычной консоли запустил и никаких ошибок - курсор переместился! ?

Evgeniy
08.05.2017
17:11:50
Отлично.
@DarkByte2016 Заодно чекни BufferWidth/BufferHeight в Rider.

Igor
08.05.2017
17:12:59

Илья
08.05.2017
17:13:21

Igor
08.05.2017
18:28:52
https://blog.jetbrains.com/dotnet/2017/05/08/rider-is-now-also-an-fsharp-ide-adding-fsharp-support/

Nikolay
08.05.2017
19:38:46
А кто-нибудь дебажил xunit?