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 ответов

52 просмотра

ты наверное так хотел? #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
когда у тебя вывод типов у ф-ции показывает вот та...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта