@Fsharp_chat

Страница 635 из 772
Artem
07.07.2018
16:03:49
Он говорил, что на некоторых тестах паритет, но я немного сомневаюсь.
он говорил же, что мона оч многое из коры взяла

именно сорцы 1 в 1

и обратно

Friedrich
07.07.2018
16:04:08
он говорил же, что мона оч многое из коры взяла
Больше по стдлибе, а не по коду рантайма и жита.

Google
Vlad
07.07.2018
16:04:48
Больше по стдлибе, а не по коду рантайма и жита.
Мигель писал помню, что они гц стянули как его открыли)

Friedrich
07.07.2018
16:05:17
Стянули gc.cpp на 30к строк? Ты не перепутал? Мб он 1 апреля это писал?

Vlad
07.07.2018
16:09:25
http://www.mono-project.com/docs/about-mono/releases/4.0.0/

Den
07.07.2018
16:09:53
Господа, есть чат F# jobs?

возможно в slack, либо в телеграме

Pavel
07.07.2018
16:15:27
А бывают f# jobs? ?

Den
07.07.2018
16:22:08
для других ЯП такие сайты/чаты в порядке вещей

Igor
07.07.2018
16:40:08
Что-то я для чатов elm и reasonml таких не видел ?‍♀️ (да и обычно это теже флудилки)

Dmitry
07.07.2018
19:22:24
https://github.com/csharpfritz/FsharpLearning/pull/8/commits/9b9f995e74fdf8a593c351d430c81db22bcb687c тут C#-Фрицу интересное пишут. Может, у кого есть что добавить?

Ayrat
07.07.2018
19:40:30
Igor
07.07.2018
21:31:41
Есть ли какой-нибудь способ проанализировать проект на наличие "неиспользуемых функций"? Сейчас приходится поштучно функции проверять на ALT+F7

Roman
07.07.2018
21:33:24
Google
Igor
07.07.2018
21:34:44
Я на маке с ionide

Roman
07.07.2018
22:37:49
https://github.com/natemcmaster/dotnet-tools/pull/36

upvote pls

Ayrat
08.07.2018
06:41:56
Вбрасываю https://github.com/cartermp/fslang-design/blob/fe6a787f7c6b2ecab850aa8b3ed846a89cb54c5d/RFCs/FS-1060-nullable-reference-types.md

// Parameter to a function let len (str: string | null) = match str with | null -> -1 | s -> s.Length

Ayrat
08.07.2018
06:44:23
синтаксис выглядит няшно, но это костыль для интеропа с C#

т.е. это не полноценный юнион тайп, а просто 'a | null

записать туда 'a | 'b не получится

но мне нравится что этот костыль хорошо продуман с заделом на будущее

вот как в дотти сделаны юнион тайпы http://dotty.epfl.ch/docs/reference/union-types.html def help(id: UserName | Password) = { val user = id match { case UserName(name) => lookupName(name) case Password(hash) => lookupPassword(hash) } // ... } я хочу такой же синтаксис в F#

Ayrat
08.07.2018
07:00:15
Зачем?
Чтобы не писать отдельный DU под примитивные случаи. Меньше кода - лучше

Vasily
08.07.2018
07:02:33
Ты просил хочешь анонимный du

Ayrat
08.07.2018
07:03:25
Ты просил хочешь анонимный du
Не совсем, анонимный тип нельзя было бы выводить как отдельный тип за пределы функции

Igor
08.07.2018
07:03:39
А со string не понятно что мне помешает null передавать, такое где НЕТ string|nulll

Vasily
08.07.2018
07:03:42
С другой стороны, как в данном случае понять, что не хватает матчей

Ayrat
08.07.2018
07:04:04
а так, я по идее должен иметь возможность сделать функцию val f : int|string -> unit

Google
Ayrat
08.07.2018
07:04:49
и компилятор должен шарить что тип int|string то же самое что и string|int

Vasily
08.07.2018
07:04:50
Т.е. анонимный Ду, который задаётся констрейном типа

Ayrat
08.07.2018
07:04:53
так что юнион тайпы это непросто

Vasily
08.07.2018
07:06:13
В целом, я думаю, если явно указывать констрейнт, то компилятору будет на что опереться при выводе типа в методе

Vasily
08.07.2018
07:07:00
Так не получится

В твоём примере даже явно указано

Пили пропозал, хуле

Friedrich
08.07.2018
07:08:41
А со string не понятно что мне помешает null передавать, такое где НЕТ string|nulll
F# формально считает многие ref type как non-nullable. Вероятно, для совместимости с C# теперь будут генерироваться и анализироваться те же атрибуты.

Vasily
08.07.2018
07:09:06
Вроде несложно должно быть значение в du завернуть

Ayrat
08.07.2018
07:09:42
я просто думаю что инфиренс в случае реальных юнион тайпов - штука опасная. ведь тогда тип вот такой функции let f n = if n % 2 = 0 then "" else 0 может быть вывеведен компилятором как int -> string | int

это всё ещё стронг тайпинг будет

Vasily
08.07.2018
07:10:06
Так не надо

Ayrat
08.07.2018
07:10:17
Так не надо
согласен

Vasily
08.07.2018
07:10:35
Только через явное указание

Иначе жс получится

Ayrat
08.07.2018
07:11:05
да не, не получится

я ж грю, всё ещё будет сильная типизация

т.е. ты выход такой функции не подашь на вход функции которая только int ждёт

Vasily
08.07.2018
07:11:55
Не получится

Google
Vasily
08.07.2018
07:12:24
На основании чего компилятор будет определять список допустимых типов?

Ayrat
08.07.2018
07:13:40
Допустимых типов для чего? он видит что один бранч ифа возвращает string, а другой int Сейчас F# кидает ошибку. А мог бы слепить из двух типов один и сказать что теперь функция возвращает string или int :D

я против такого поведения если чо

Ayrat
08.07.2018
07:17:59
Это уже жс :)
если бы из функции выводился тип "object", "dynamic" или "variant", то да, получался бы жс, т.к. идёт ослабление типизации

как тип сумма - string | int - ослабляет типизацию? В упор не понимаю. Тебя компилятор обяжет её заматчить чтобы достать какой-то из вариантов

точно так же как компилятор тебе кинет ошибку если ты значение виде int | string попытаешься прокинуть в функцию которая ожидает только int это ожидаемое поведение в сильнотипизированных языках и оно сохраняется

Vasily
08.07.2018
07:23:44
как тип сумма - string | int - ослабляет типизацию? В упор не понимаю. Тебя компилятор обяжет её заматчить чтобы достать какой-то из вариантов
Это тебя не спасает от ошибок неверных типов возврата в теле функции. Скорее компилятор это будет тупо проглатывать

Если явно не указать допустимые типы

Ayrat
08.07.2018
07:27:05
Не понимаю почему нельзя компилятор научить выводить такую сумму на лету? Если ты ошибся в теле и где-то у тебя проскользнёт () например: let f n = if n % 3 = 0 then 0 elif n % 2 = 0 then "" то у тебя компилятор выведет тип как int | string | unit, что моментально, в компайл тайме поломает программу

Vasily
08.07.2018
07:29:58
Научить можно

Проблема в том, что в теле метода легко ошибку допустить

И вернуть юнион случайно, например

Ayrat
08.07.2018
07:30:55
Проблема в том, что в теле метода легко ошибку допустить
так у тебя тип сразу же поменяется, это ошибка будет видна в реалтайме

Vasily
08.07.2018
07:31:04
А компилятор такой- все ок , чувак

Ayrat
08.07.2018
07:32:25
мы чот про разные компиляторы говорим походу) я вот про фшарповый говорю, которы не позволяет тип А засовывать в функцию, которая ожидает тип B :D и если я ошибся в теле метода и компилятор вывел из метода что-то другое, то у меня моментально выскакивает ошибка.

Vasily
08.07.2018
07:33:27
так у тебя тип сразу же поменяется, это ошибка будет видна в реалтайме
Я предпочитаю, чтобы мне руки пораньше отрубало

Ayrat
08.07.2018
07:33:31
в фшарпе случайно поменять тип у функции и при этом не заметить как твой код покрывается красным цветом очень непросто

Vasily
08.07.2018
07:34:00
Придется за пивом обсудить :)

Ayrat
08.07.2018
07:34:16
Я предпочитаю, чтобы мне руки пораньше отрубало
так их оторвёт в момент как ты кнопку клавиатуры отпустишь, рисуя неправильное тело функции))

Google
Ayrat
08.07.2018
07:34:29
если ты не в блокноте пишешь конечно без компайл чека

Давай я ещё за юнион тайпы потоплю. Т.к. это объединение множеств по сути, то элемент типа int | string должен спокойно заходить в такую функцию let f (intStringOrUnit: int | string | unit) = ...

это математически верно, т.к. множество int | strint | unit полностью включает в себя без остатка множество int | string

с DU это невозможно

Vasily
08.07.2018
07:37:30
Короче

Ayrat
08.07.2018
07:37:33
потому что они размеченные

Vasily
08.07.2018
07:38:19
Я за то, чтобы типы объявлять до объявления тела функции

Если прописано, что функция возвращает string|int,то все ок

И неясно, как в твоём случае быть, если в одной ветке ты возвращаешь string|int,а в другой string|null

Ayrat
08.07.2018
07:41:22
объединять их дальше

string | int | null

:D

Vlad
08.07.2018
07:41:43
Vasily
08.07.2018
07:44:10
string | int | null
Ну вот и приплыли :)

Ayrat
08.07.2018
07:44:17
Vasily
08.07.2018
07:44:50
Ну потому что, например, мы хотим допускать null только для string

Но лучше другой пример

Ayrat
08.07.2018
07:45:24
это уже именно размеченное объединение

Vasily
08.07.2018
07:45:33
String,string|null

Ayrat
08.07.2018
07:45:38
а просто union тайп тем и отличается от DU что он неразмечен

Vasily
08.07.2018
07:46:07
Непонятно тогда, зачем он нужен

Ayrat
08.07.2018
07:46:23
и коль он неразмечен, то такой тип должен быть ассоциативен, комутативен и ещё страшное слово, идемпотентен (к объединению)

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