Ayrat
Ayrat
т.е. это было так заявлено. Причём т.к. имя генерится компайлером, в спеке написано что имя будет персистентно и не поменяется в следующей версии компилятора
Ayrat
чтобы ты мог спокойно собирать старый код который ссылается на анонимные рекорды
Vladislav
Vasily
Я познал SRTP и он охуенно помог упростить код
Hog
Vasily
Хорошо. ПОТРОГАЛ
Hog
в смысле я верю в то, что основной код стал проще :)
Roman
Vladislav
Hog
Hog
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/statically-resolved-type-parameters
Анна
- пацаны, а как будет «костыль» по-английски?
- workaround!!!
Hog
crutch :)
Hog
Анна
ad-hoc?
Я не спрашиваю, я кухонный диалог цитирую 🧐
Hog
Vladislav
Анна
По-моему до менеджмента дошли мои страдания и они думают, как снять с меня бремя кодревью 😱
Vladislav
Вот мои страдания идут к богу
Roman
Vasily
Анна
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
Что определение не писать кучу раз
Vasily
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 тот же
Vasily
Анна
Чот от меня все работодатели потенциальные разбежались 😐🙈😭
Vasily
Анна
Roman
Гист
https://gist.github.com/rliman/e01a4a3428ec753a8b6ccde2b3923ef0
Roman
о, я не знал
Klei
Насчёт скоупа лучше уточнить. Вроде бы один файл также действует.
Vasily
Про тайп экстеншны надо изучать вопрос, конечно
Klei
Но сртп все равно через расширение не заработает.
Klei
Его только пилят.
Klei
Или обсуждают.
Klei
А из викли только туда попадаю.
Klei
Так что лучше кого-то постарше спроси.
Roman
А ссылка есть на rfc?
https://stackoverflow.com/questions/38071645/error-on-extension-methods-when-inlining/38071927#38071927
Vladislav
Roman
Igor
ну круто ж было бы а
Это то понятно, можно было бы еще моноид выразить) (дальше сложнее тк hkt нету)
Igor
Ну и не понятно, как это будет с тайп-инференсом дружить