
Friedrich
05.10.2017
15:25:09
MS не хотели сами делать сериализатор из-за того, что есть проблемы с генерацией PDB. А мы можем пока забить на PDB.

Vasily
05.10.2017
15:29:50
Хммм... можно попробовать через https://msdn.microsoft.com/ru-ru/library/system.reflection.assembly.getobjectdata(v=vs.110).aspx

Vlad
05.10.2017
15:38:56
Тут кстати обсуждение есть драмы, где ещё на сайте шрифты покусало https://www.reddit.com/r/fsharp/comments/73uy4k/open_source_in_the_f_community_part_1/?st=J8EMM6D1&sh=15890957

Evgeniy
05.10.2017
15:46:47

Google

Friedrich
05.10.2017
15:47:29
Так уже разобрались ведь, не?
https://wizardsofsmart.wordpress.com/2017/10/01/response-to-open-source-in-the-f-community-part-1/ всё расставил по местам.

Nikolay
05.10.2017
16:00:10
Фридрих, смотрел что там с провайдерами?
Сейчас проблема с сохранением сборки?

Igor
05.10.2017
23:55:05
А ведь если в F# добавят тайп-классы,
мы же все равно не сможем сделать тот же функтор тк в F# нет HKT?
(не то что бы я хотел их, просто интересно)

Friedrich
06.10.2017
03:35:15

Anton
06.10.2017
07:26:38

Friedrich
06.10.2017
07:32:10

Anton
06.10.2017
07:33:29

Friedrich
06.10.2017
07:33:44
Потому что BCL — не для хаскелистов.

Anton
06.10.2017
07:35:19
Так себе перспектива.

Aleksey
06.10.2017
07:35:44

Google

Friedrich
06.10.2017
07:35:55
FSharpPlus — это набор специальных телескопических подпорочек, на которых можно делать всё что нужно ;)

Aleksey
06.10.2017
07:37:07
Как будет выглядеть хаскельная функция
fmapTwice :: Functor f => (a -> a) -> f a -> f a
fmapTwice f x = fmap f (fmap f x)
?

Friedrich
06.10.2017
07:37:12
Хотя нет, не совсем. Для своего типа можно реализовать, для чужого нельзя (для чужого может только автор FSharpPlus). Функцию, которая принимает функтор, сделать можно.
» Для своего типа можно реализовать, для чужого нельзя (для чужого может только автор FSharpPlus).
Вот это и есть то самое ограничение SRTP, с которым сейчас активно борятся Дон сотоварищи. Возможно, в 4.2 починят, и тогда вообще всё станет хорошо.

Aleksey
06.10.2017
07:42:39
let inline (+) (a:'T) (b:'T) :'T = a + b
это норма? Я про ограничение (его отсутствие) типа T до "типа который умеет складываться"

Friedrich
06.10.2017
07:42:55

Aleksey
06.10.2017
07:43:41
А, я понял. inline просто подставит до тайпчека. В неправильном месте словим ошибку

Friedrich
06.10.2017
07:43:43
Заметьте, что там хитрость из разряда «греческие < и >»: 'Functor't это обычный идентификатор, типа 'y

Aleksey
06.10.2017
07:44:03
Без inline небось не будет работать?

Friedrich
06.10.2017
07:44:11
Совершенно точно не будет.

Aleksey
06.10.2017
07:44:28
Т.о. это шаблонизация

Friedrich
06.10.2017
07:44:32
Тайпклассы в F# — это фича SRTP, поэтому она требует инлайна.

Aleksey
06.10.2017
07:46:04
В хаскеле ограничение выведется само, но указать его нужно будет руками, если вообще сигнатура типа указана (если не указана - всё норм будет)
Иначе толку от сигнатур нет, по крайнеймере в роли "документации"

Friedrich
06.10.2017
07:46:12
Только вот ограничения выглядят хтонически, я даже не смогу воспроизвести. Если кратко, то Functor f => превратится в полное определение типа, обладающего функцией map, которая делает то-то и то-то.

Aleksey
06.10.2017
07:46:48
Трешовенько

Nikolay
06.10.2017
07:46:52
Фридрих, ты ковырялся вчера с тайп провайдерами?

Friedrich
06.10.2017
07:47:16
Нет, не ковырялся. Ковырялся с Reflection.Emit, там всё хорошо.

Google

Nikolay
06.10.2017
07:47:28
А с сохранением сборки?
Спрашивал вчера

Friedrich
06.10.2017
07:48:01
Сборки сохранять нельзя, и никакого быстрого хака для этого мне не удалось подобрать.

Nikolay
06.10.2017
07:48:45

Friedrich
06.10.2017
07:48:50
Где-то есть мифическая ветка Mono.Cecil с недоделанным трансформатором из Assembly(Builder?), с которым хотелось бы поиграться. Но мне сходу её найти не удалось.
Нет реализации в .Net Standard?
В перечислении AssemblyBuilderAccess в .NET Core вообще нет значения SaveAndRun (которое было в полном фреймворке). Там только Run и RunAndCollect.

Nikolay
06.10.2017
07:50:38
А нам именно SaveAndRun нужен?

Friedrich
06.10.2017
07:50:50

Evgeniy
06.10.2017
07:51:18

Nikolay
06.10.2017
07:51:19
Т.е. нужно разобраться, зачем там используется SaveAndRun?

Friedrich
06.10.2017
07:51:43
Найди, откуда там берутся динамические сборки при использовании тайп-провайдеров — сами они их генерируют, или же через API получают от компилятора.

Nikolay
06.10.2017
07:53:00
https://github.com/dotnet/corefx/issues/4491
Видел, да?

Friedrich
06.10.2017
07:53:03
Я бы начал с рассмотрения кода какого-нибудь простого провайдера. Наверняка есть совсем примитивные примеры на гитхабе. Это поможет понять, какой там API.

Anton
06.10.2017
07:54:59

Friedrich
06.10.2017
07:55:15
И не нужно ждать нового релиза компилятора, например, если хочется поменять схему наследования тайпклассов.

Anton
06.10.2017
07:55:36
Совсем не понимаю, что тут хорошего.

Google

Friedrich
06.10.2017
07:55:49
И представь, что у нас никогда, в принципе такого не будет.
Когда вещи разложены по библиотекам — это намного удобнее. Всяк может использовать те версии библиотек, которые ему нравятся, и это никак не завязано на версию компилятора.
Впрочем, забота о совместимости перекладывается на плечи мейнтейнеров библиотек.

Anton
06.10.2017
07:58:00
которые могут забить болт, т.к это не MSFT
по этому я за BCL

Friedrich
06.10.2017
07:58:17
Я бы, если честно, мечтал, чтобы FSharp.Core тоже распилили на части.

Evgeniy
06.10.2017
07:58:40
по этому я за BCL
В BCL этого не будет, потому что в языках и платформе отсутствуют необходимые типы.

Admin
ERROR: S client not available

Evgeniy
06.10.2017
07:58:47
И давайте будем честными, FSharpPlus — это игрушка.

Friedrich
06.10.2017
07:58:59
Если нужно <X> — бери и используй <X>.
Выбор других языков программирования приглашаю вас обсудить во флудилке.

Igor
06.10.2017
07:59:58

Friedrich
06.10.2017
08:00:35

Evgeniy
06.10.2017
08:01:24
HERESY
Нет, это серьезный вопрос. FSharpPlus — это неидиоматично для F#, я очень не рекомендую ее использовать в настоящих проектах.

Friedrich
06.10.2017
08:01:50
Если хочется использовать функторы или ещё какие-нибудь тайпклассовые штуки — то у тебя вообще нет другого выбора. (Только писать свою такую же библиотеку, но это NIH)
Ну а если не хочется — тогда, безусловно, не используй. И FSharpPlus тогда тебе не нужен.

Anton
06.10.2017
08:02:29

Friedrich
06.10.2017
08:03:02
Пожалуйста, пройдите во флудилку с дискуссиями о выборе других языков. Спасибо.

Google

Anton
06.10.2017
08:03:41
Хз, я говорю за то, что в F# нужно впилить функторы!

Friedrich
06.10.2017
08:04:11

Anton
06.10.2017
08:04:47
Ну у нас язык с притензиями на ФП без кор фп фич!

Friedrich
06.10.2017
08:04:49
В ядро FSharp.Core такое точно тащить не нужно. Если будет в библиотеке (как оно и есть), и желающие смогут использовать — отлично.
Если вдруг, внезапно эта библиотека станет настолько широко использоваться, что почти любой проект станет немыслим без неё — вот тогда можно будет поговорить о включении в FSharp.Core.

Anton
06.10.2017
08:06:00
Но вот есть нюанс - это не библиотека под крылом Сайма!

Igor
06.10.2017
08:06:30

Friedrich
06.10.2017
08:06:34
В Scala вот есть разные реализации всей этой функциональности — cats и scalaz. И это очень положительно сказывается на экосистеме, как мне кажется.
Так что уж лучше пусть и у нас будет в библиотеках.

Anton
06.10.2017
08:07:23
у них там и несколько GC для java

Friedrich
06.10.2017
08:07:45
Хочешь — пиши свой, подключай по официальному API и используй.

Anton
06.10.2017
08:08:28
.net core не готов в продакшен, так что у меня их не несколько =)

Friedrich
06.10.2017
08:08:30
Как минимум одна сторонняя реализация уже есть (zero GC, ага :)

Anton
06.10.2017
08:08:43
лет через 5 можно будет посмотреть

Evgeniy
06.10.2017
08:08:49
Теперь точно во флудилку.

Anton
06.10.2017
08:08:55
А пока что - да там банально тайп провайдеров нет.