Size: a a a

2020 June 07

Т8

Т-34 85 in rust_offtopic
Doge Shibu
В скале вот так будет:
type HasMyError[F[_]] = ApplicativeError[F, MyError]

def myFunction[F[_]: HasMyError](...): F[SomeOutput] = ???
хм, я что-то подобное где-то видел...
источник

p

polunin.ai in rust_offtopic
Doge Shibu
В скале вот так будет:
type HasMyError[F[_]] = ApplicativeError[F, MyError]

def myFunction[F[_]: HasMyError](...): F[SomeOutput] = ???
Блин, можно не кидать скримеры на ночь глядя!
источник

DS

Doge Shibu in rust_offtopic
polunin.ai
Блин, можно не кидать скримеры на ночь глядя!
А что такого:
myFunction :: (MonadError MyError m) => ... -> m SomeOutput
источник

Т8

Т-34 85 in rust_offtopic
Doge Shibu
В скале вот так будет:
type HasMyError[F[_]] = ApplicativeError[F, MyError]

def myFunction[F[_]: HasMyError](...): F[SomeOutput] = ???
в Vala

// error domain with multiple error codes instead of exception class
errordomain MyError {
   FOO,
   BAR
}

// must be declared in method signature, part of the contract
void method () throws MyError {
   // error domain, error code, error message
   throw new MyError.FOO ("not enough foo");
}
источник

Т8

Т-34 85 in rust_offtopic
кстати, там исключения проверяемые, но компилятор кидает варнинг
источник

Т8

Т-34 85 in rust_offtopic
// must be catched or propagated, compiler warning if ignored
try {
   method ();
} catch (MyError e) {
   stderr.printf ("Error: %s\n", e.message);
}
источник

NL

Nick Linker in rust_offtopic
чекед эксепшонз🙄
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
в Vala

// error domain with multiple error codes instead of exception class
errordomain MyError {
   FOO,
   BAR
}

// must be declared in method signature, part of the contract
void method () throws MyError {
   // error domain, error code, error message
   throw new MyError.FOO ("not enough foo");
}
Это разные вещи.

В скале и хаскеле вышеописанный способ абстрагирует возврат ошибки от способа её возврата.

Та функция myFunction будет работать и для возврата через Either и для возврат через исключение
источник

NL

Nick Linker in rust_offtopic
Т-34 85
// must be catched or propagated, compiler warning if ignored
try {
   method ();
} catch (MyError e) {
   stderr.printf ("Error: %s\n", e.message);
}
Ты скажи, в vala функции map и filter какой тип будут иметь? Что если я туда передам лямбды с сайдэффектами?
источник

Т8

Т-34 85 in rust_offtopic
Nick Linker
Ты скажи, в vala функции map и filter какой тип будут иметь? Что если я туда передам лямбды с сайдэффектами?
источник

Т8

Т-34 85 in rust_offtopic
Doge Shibu
Это разные вещи.

В скале и хаскеле вышеописанный способ абстрагирует возврат ошибки от способа её возврата.

Та функция myFunction будет работать и для возврата через Either и для возврат через исключение
аа... Ну, это прикольно, конечно. Но,боюсь, только для богатых
источник

NL

Nick Linker in rust_offtopic
Да, спасибо. Сигнатура никак не контролирует исключения и это тревожный сигнал.
Проблемы будут те же, что и в плюсах, когда исключения вылетают из недр библиотек.
источник

Т8

Т-34 85 in rust_offtopic
Nick Linker
Да, спасибо. Сигнатура никак не контролирует исключения и это тревожный сигнал.
Проблемы будут те же, что и в плюсах, когда исключения вылетают из недр библиотек.
контролирует, просто там она их не кидает. Вот кидающая https://valadoc.org/gio-2.0/GLib.DataInputStream.read_line.html
источник

Т8

Т-34 85 in rust_offtopic
[ CCode ( array_length = false , array_null_terminated = true ) ]
public string? read_line (out size_t length = null, Cancellable? cancellable = null) throws IOError
источник

Т8

Т-34 85 in rust_offtopic
а вот в шарпе нельзя так, хотя вала с него пиздила синтаксис и семантику
источник

EG

Emmanuel Goldstein in rust_offtopic
Т-34 85
контролирует, просто там она их не кидает. Вот кидающая https://valadoc.org/gio-2.0/GLib.DataInputStream.read_line.html
Хорошо, а как выразить «моя функция кидает те же самые исключения, что и функция-аргумент»?
источник

EG

Emmanuel Goldstein in rust_offtopic
Условно, простейшая функция:
def g(f):
   return f()
источник

EG

Emmanuel Goldstein in rust_offtopic
Emmanuel Goldstein
Условно, простейшая функция:
def g(f):
   return f()
Какой тип у этой функции?
источник

Т8

Т-34 85 in rust_offtopic
Emmanuel Goldstein
Условно, простейшая функция:
def g(f):
   return f()
в смысле, можно ли делегату указать наличие эксепшинов? Хороший вопрос, я спрошу
источник

G

Gymmasssorla in rust_offtopic
Более чем уверен, что нельзя
источник