169 похожих чатов

Захотелось мне с UMX сделать короткий алиас для string (type

s = string), но с s<foo> я обломался
это UMX с алиасами типов не работает или я его готовить не умею
??

код полностью:
[<Measure>] type Foo

type s = string

let f (arg: s<Foo>) = ()

//=> The non-generic type 'Program.s' does not expect any type arguments, but here is given 1 type argument(s)F# Compiler33

11 ответов

26 просмотров

ты наверное так хотел? #r "nuget: FSharp.UMX" open FSharp.UMX [<Measure>] type Foo type s = string<Foo> let f (arg: s) = ()

Но так ведь ещё короче?

dd- Автор вопроса
/home/slavonchick> sudo
Но так ведь ещё короче?

моё "короче" - без потери данных о типе в описании :)) ну серьёзно, удобнее же когда s<Foo>, а не s (учитывая, что тебе известно, что s = string)

dd
моё "короче" - без потери данных о типе в описании...

хз, это субъективно. лично мне - не удобнее

dd- Автор вопроса
/home/slavonchick> sudo
хз, это субъективно. лично мне - не удобнее

а ты это как видишь, как указание типа в аргументе ф-ции? или как выведенная компилятором "цепочка типов" у ф-ции? просто во втором случае намного удобнее, если "цепочку типов" укоротить как-то я конечно могу сделать алиасы наподобие s'Foo, но тогда нахрена мне, спрашивается, UMX? 🤣🤣🤣 [в таком случае я и без measure обойдусь]

dd
а ты это как видишь, как указание типа в аргументе...

да не, Measure же на для алиасов нужны. это удобный способ сделать обёртку, которая будет помогать во время компиляции, но в рантайме от неё никакого оверхэда не будет

dd- Автор вопроса
dd
а ты это как видишь, как указание типа в аргументе...

UMX удобен выделением "логики" в отдельную "ветвь" (measure) если же делать свои алиасы, то это не выделение "логики", а выделение "синтаксиса"

dd
моё "короче" - без потери данных о типе в описании...

Да, удобнее когда непонятный тип, вместо привычного (нет).

dd- Автор вопроса
/home/slavonchick> sudo
вот этого я вообще не понял

когда у тебя вывод типов у ф-ции показывает вот такое: // #1 string<Foo> -> string<Bar> -> string<Baz> -> ... // #2 int<Foo> -> int<Bar> -> int<Baz> -> ... это значит, что ты используешь measure + UMX для выноса "логики" (на уровень [<Measure>] type ...) а когда у тебя вот такое: // #1 s'Foo> -> s'Bar -> s'Baz -> ... // #2 i'Foo -> i'Bar -> i'Baz -> ... это значит "тупое задротство на уровне именования алиасов типов"

dd
когда у тебя вывод типов у ф-ции показывает вот та...

я всё равно ничего не понял, но честно говоря и не хочется)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта