Ayrat
т.е. это было так заявлено. Причём т.к. имя генерится компайлером, в спеке написано что имя будет персистентно и не поменяется в следующей версии компилятора
Ayrat
чтобы ты мог спокойно собирать старый код который ссылается на анонимные рекорды
Vasily
Я познал SRTP и он охуенно помог упростить код
Vasily
Хорошо. ПОТРОГАЛ
Hog
в смысле я верю в то, что основной код стал проще :)
Dmitry
Я познал SRTP и он охуенно помог упростить код
простите, а что это? Может я это каждый день делаю но не знаю?
Hog
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/statically-resolved-type-parameters
Анна
- пацаны, а как будет «костыль» по-английски? - workaround!!!
Hog
crutch :)
Анна
ad-hoc?
Я не спрашиваю, я кухонный диалог цитирую 🧐
Анна
По-моему до менеджмента дошли мои страдания и они думают, как снять с меня бремя кодревью 😱
Vladislav
Вот мои страдания идут к богу
Анна
просто перестаньте их проводить! пара па-ра пам!
Нас просто смоет потоком дерьма 🤷‍♀️
Vasily
Компилится - в продакшн
Vasily
Не компилится - на стейдж
Roman
звучит как финтех
Анна
Тут чуть другая специфика
Vasily
В финтехе сразу на прод
Vasily
На одну из нод
Roman
@vshapenko так это, ты скинешь гист с тем, как тебе сртп всю картину к лучшему поменял?
Roman
не стеба ради, а для кругозора, если чо
Vasily
let inline custom< ^a when ^a : (static member read : ComplexType -> ^a)> t = match t with | Object(t, l) -> (^a : (static member read : ComplexType -> ^a) (ComplexType(t, l))) |> Some | _ -> None
Vasily
let inline toInstance2 (x:ComplexType): ^a = ( (^a) :(static member read:ComplexType-> ^a) x) let inline serialize (x: ^a)= ((^a) :(static member write: ^a->ComplexType) x) |>serializeType let inline deserialize2 msg:^a= msg|>Seg|>read|>toInstance2
Vasily
И магия....
Vasily
let sentCode:SentCode=deserialize2 msg.Payload
Vasily
msg.Payload - byte[]
Vladislav
Там вроде активные патерны можно заюзать
Vladislav
Что определение не писать кучу раз
Vladislav
поясни
http://www.fssnip.net/7U0/title/Methods-deconstruction-via-active-patterns
Vladislav
У тебя там read повторяется
Vasily
Это да
Vasily
Без этого не компилится
Vasily
Активный паттерн может помочь, да
Vasily
Надо выучить
Vasily
Я в них просто не умею пока
Roman
пытаюсь как-то подружить сртп и тайп экстеншены. Если получится — будут трейты!
Roman
но пока не выходит
Vasily
Не получится скорее всего
Roman
частично работает. Не смог навесить трейт на инт, но смог на кастомный тип
Vasily
На инт нельзя навесить
Vasily
Как и на любой алиас
Roman
я на нормальный инт
Vasily
Ну расширить можно
Roman
то есть тайп экстеншн сам скомпилился, а вот запихать его в функцию не получилось
Igor
пытаюсь как-то подружить сртп и тайп экстеншены. Если получится — будут трейты!
Я вот в последнее время думаю, а какие это проблемы решит?
Roman
короч могу скинуть код
Vasily
Int32 тот же
Анна
Чот от меня все работодатели потенциальные разбежались 😐🙈😭
Анна
Roman
Гист
https://gist.github.com/rliman/e01a4a3428ec753a8b6ccde2b3923ef0
Klei
https://gist.github.com/rliman/e01a4a3428ec753a8b6ccde2b3923ef0
Ты расширил тип в том же скоупе. F# скомпилит расширение как родное.
Roman
о, я не знал
Klei
Насчёт скоупа лучше уточнить. Вроде бы один файл также действует.
Vasily
Про тайп экстеншны надо изучать вопрос, конечно
Klei
Но сртп все равно через расширение не заработает.
Klei
Его только пилят.
Vasily
Его только пилят.
А ссылка есть на rfc?
Klei
Или обсуждают.
Klei
А из викли только туда попадаю.
Klei
Так что лучше кого-то постарше спроси.
Roman
А ссылка есть на rfc?
https://stackoverflow.com/questions/38071645/error-on-extension-methods-when-inlining/38071927#38071927
Igor
ну круто ж было бы а
Это то понятно, можно было бы еще моноид выразить) (дальше сложнее тк hkt нету)
Igor
Ну и не понятно, как это будет с тайп-инференсом дружить