
Andrew
02.01.2018
11:10:01
Дичь воще!

Alex
02.01.2018
21:17:23
Возможно тупой вопрос задаю, но все же, может кто поведает, почему результат следующего кода null а не None ?
type T = { Count : int option }
let t = { Count = None }
t.GetType().GetProperty("Count").GetValue(t);;

Pavel
02.01.2018
21:26:32
http://www.fssnip.net/kL/title/Why-printing-None-prints-null

Google

Alex
02.01.2018
21:40:19
Спасибо за ссылочку, интересный аттрибут, он спецально для Option был создан ?
Вернее флаг, а не сам аттрибут
C msdn - UseNullAsTrueValue ->
Permit the use of null as a representation for nullary discriminators in a discriminated union.
А nullary discriminators in a discriminated union, так понимаю те, что не содержат после себя, эм, как бы назвать, "секцию" of , где кортеж описывается ?

Pavel
02.01.2018
22:36:16

Evgeniy
03.01.2018
05:55:00
Привет.

Alexander
03.01.2018
08:26:42
Привет

Владислав
03.01.2018
09:35:47
учить F#, когда работаешь на C# приводит к грусти. Использовать не могу, но понимаю насколько он крутой(

Andrew
03.01.2018
09:41:47
Поэтому я хочу придумать опенсурс проект где смогу его заюзать

Владислав
03.01.2018
09:52:29
List.take count inputList
inputList |> List.take count
когда мало операторов
как лучше писать?

Google

Andrew
03.01.2018
09:54:40

Artemy
03.01.2018
09:56:50
Ну если других функций, кроме List.take count, нету, то всё равно. А вообще, |> часто используется, т.к., мол, читать проще — вся цепочка естественным образом слева направо читается.
+ ещё <| и |> имеют низкий приоритет, так что иногда их можно использовать, чтобы от лишней пары скобок избавиться.

Alexander
03.01.2018
14:23:47
У меня тут вопросик назрел. Можно ли использовать XmlProvider из FSharp.Data в .fs файлах, и если можно то как? А то у меня работает только в .fsx и то бе интеллисенса

Alex
03.01.2018
14:39:00

Григорий
03.01.2018
15:01:54

Alexander
03.01.2018
15:03:55
Щас попробую отпишусь
VIsualStudio ругается на нугет пакеты и на FSharp.Data и FSharp.Data.XMLProvider, а FSharp.TypeProvider вообще не сущуствует
мне кажется что я явно что-то делаю не так

Григорий
03.01.2018
15:26:00
поправочка FSharp.TypeProvider находиться в FSharp.Data
нужно только FSharp.Data скачать, его open FSharp.Data и все
а какие пакеты были скачаны через пакетный менеджер?

Alexander
03.01.2018
15:33:10
я тут поковырялся и он продолжате ругаться но работает
вот такие дела
ругался он на версию .net
Я ещё дополнительно поставил FSharp.Data.XMLProvider после этого он вроде заработал
но

Google

Григорий
03.01.2018
15:36:07
провайдер для JSON, XML, SQL, находятся в FSharp.Data

Alexander
03.01.2018
15:36:25
да я всё это уже перечитал раз 10 точно
и тесты прогнал и в ручную собрал, но вот ругается зараза
но работает

Григорий
03.01.2018
15:38:26
а FSharp.Data.TypeProviders открыт в проекте?
у меня такая же проблема была с SQLProvider как и у вас

Alexander
03.01.2018
15:40:06
не его на всякий установил, только FSharp.Data в проекте
даже на System.Xml.Linq не ссылался как на гите говорят
но вот работает даже с интеллисенсом
а если в VSCode cобирать с вручную собранными библиотеками, то не работате не в какую

Григорий
03.01.2018
15:42:13

Alexander
03.01.2018
15:42:17
да
я просто в основном на дебиане сижу, а на винду перехожу только ради VisualStudio, поэтому не очень рад тому что VSCode с этим не справляется
Содал библиотеку на F#, подключил туда только FSharp.Data и всё вроде заработало, чюдеса и только

Григорий
03.01.2018
15:47:27

Alexander
03.01.2018
15:48:26
Да у меня ноут не очень новый и студия добрый кусок оперативы и проца откушивает а если ещё и с хромом то это вообще жуть

Alex
03.01.2018
16:21:38

Aminion
03.01.2018
19:30:43
Как работать с вложенными монадами? Task<Option> к примеру
Bind/Apply

Google

Igor
03.01.2018
19:44:36
А зачем, это же все равно IO (эффект). Кидай исключение ?

Сергей
03.01.2018
19:55:18

Sergey
03.01.2018
20:20:08

Aminion
03.01.2018
20:31:41
увы, захотели реализовать в шарпе, проникнутся фп в проде. То есть, в общем случае создают новую монаду?
генерик решения для M1<M2<T>> нет?

Evgeniy
03.01.2018
20:35:19

Aminion
03.01.2018
20:45:04
Не, я не о том чтоб прям тайпкласс писать, хоть бы прост очастные случаи, у меня просто нет идей, как написать байнд к двум вложенным монадам, композя их байнды
А, еще, тут говорили скоро 4.5 фшарп будет, ченжлог есть? Так же говорили, что работают над аналогом тайпклассов, есть новости?

Alex
03.01.2018
20:53:02
Все тут
https://github.com/fsharp/fslang-design

Alexander
03.01.2018
22:45:43
Я так понял что библиотеку написанную на F# (.NET Core) нельзя использовать в C# (.NET Framework)?
Или я опять что-то где-то недоглядел

Andrew
03.01.2018
22:47:14
Ну библиотека для .NET Core это .NET Standart библиотека, при определенных условиях совместимости это можно сделать, но насколько я знаю внутренние структуры из F# нельзя засунуть в C#, только поддерживаемые .NET'ом
Поправьте, если ошибся

Alexander
03.01.2018
22:48:41
да сректуры значения не имеют, просто я подключаю библиотеку,не важно к консольному или к вэб формам и проект тут же отказывает компилироваться
вот .NET Standart ещё не пробовал
вин формам*

Alex
03.01.2018
22:54:20
Что за такие внутренние структуры F# ?

Alexander
03.01.2018
22:54:22

Andrew
03.01.2018
22:55:00

Alexander
03.01.2018
22:55:27
и лист в F# это совсем не лист в C#

Google

Alexander
03.01.2018
22:55:59
там специальная библиотека за это отечает, а вот с массивами всё впорядке

Eugene
03.01.2018
22:56:46

Andrew
03.01.2018
22:57:29
Ну вот, я имел ввиду что эта информация за пределами проекта F# никуда не идет

Alex
03.01.2018
22:58:00
Так то по сути все интероперабельно, просто из C# это будет выглядить странно

Eugene
03.01.2018
22:58:01
На самом деле идёт в метаданные сборки, но её видит потом только компилятор F# из других проектов.
Ну, почему же странно.) Всё заменится на честные double или другой соответсвующий тип.

Alex
03.01.2018
22:59:49
Имел ввиду какие нибудь Discreminated unions

Eugene
03.01.2018
23:01:54
Тоже всё во вполне честные типы скомпилируется. Либо иерархия классов (если есть поля в кейсах), либо статичные проперти для кейсов без полей. Ну, и будет навешано куча атрибутов, которые читает компилятор, опять же.
Из C#/VB можно использовать довольно много вещей, но иногда не очень удобно или предсказуемо. Например, в некоторых случаях для let-биндингов в модулях сходу неочевидно, во что они скомпилируются: в статическую property или в метод, если не вникать в правила, которые использует компилятор. В последнем случае есть ещё сложности с тем, чтобы заставить метод принимать tuple, ибо компилятор захочет развернуть его в несколько параметров.
В таких случаях публичные API можно писать через member в типах, и проблем быть не должно для всего, что умеют другие языки.


Alex
03.01.2018
23:18:11
А такой вот вопрос: есть 2 репозитория
https://github.com/fsharp/fsharp
https://github.com/Microsoft/visualfsharp
В обоих написано что содержит компилятор, Core library и т.д. Вторая это форк или какая то своя версия, есть разные реализации компиляторов или что ?
Понятно что вторая содержит еще и код для интеграции с вс, но там и другого помимо этого много


Eugene
03.01.2018
23:20:26
Второе — то, куда переехала почти вся разработка компилятора и всего связанного с ним. Из первого публикуют пакеты для Mono, разных вариантов линуксов и, кажется, чего-то ещё.
Из C#/VB можно использовать довольно много вещей, но иногда не очень удобно или предсказуемо. Например, в некоторых случаях для let-биндингов в модулях сходу неочевидно, во что они скомпилируются: в статическую property или в метод, если не вникать в правила, которые использует компилятор. В последнем случае есть ещё сложности с тем, чтобы заставить метод принимать tuple, ибо компилятор захочет развернуть его в несколько параметров.
В таких случаях публичные API можно писать через member в типах, и проблем быть не должно для всего, что умеют другие языки.
В основном, это про граничные случаи, которые бывают нечасто.

Alex
03.01.2018
23:22:13

Artemy
03.01.2018
23:29:01
F# записи (records) точно можно вызывать из C#, т.к. они преобразуюстя в обычный класс со свойствами. Для обычных полей записи это будут свойства только с get, ну а изменяемым полям записи (которые с ключевым словом mutable) будут соответствовать свойства с get и set.
Только с дополнительными фишками, типа structure equality и ещё чего-то там
Вообще, вот тут удобно смотреть, какой C#-код получается при декомпиляции скомпилированного F#-кода:
https://sharplab.io/


Alex
03.01.2018
23:41:48
А если DU выставить наружу как принимаемый тип в некоторой апишке
например такой
type ChangeRequest =
| Register of
BusinessForm: BusinessFormType *
TaxationSystem: TaxationSystemType
| ChangeRegistrationDate of
RegistrationDate: DateTime
| ChangeTaxationSystem of
Year: int *
TaxationSystem: TaxationSystemType
этот тип подключить в C# проект и через некий апи клиент отправить на апи которое на F# и например Giraffe . В IL они может и выглядят как иерархия классов обычная а вот на сколько знаю, но не уверен, в виде Json выглядят по разному ?

Eugene
03.01.2018
23:42:17

Artemy
03.01.2018
23:44:14