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

Подскажите какой сейчас рекомендованный подход с передачей опциальных (optional) параметров

в функцию? Я нашел по крайней мере 6 возможности.
1. Использывать библиотеку Data.Optional (optional-args-1.0.2),
2. определить параметер как запись (record) и инициализировать только известные параметры в этой записи.
3. Использывать Maybe
4. определить спец класс
class Optional1 a b r where
opt1 :: (a -> b) -> a -> r
как показано здесь
https://stackoverflow.com/questions/7781096/is-there-a-better-way-to-have-optional-function-arguments-in-haskell
5. With ViewPatterns
6. передавать параметры как список


А вы как передаете опциональныйпараметер в функции?

15 ответов

65 просмотров

6. https://hackage.haskell.org/package/named

8. рекорд или другая структура, а передавать state action do param1 .= value1 param2 .= value2

а я предпочитаю 2 и 3

2 и 3

ещё можно 2 вариант обогатить дефолтом адхок или https://hackage.haskell.org/package/data-default

9. раскаррировать! класс и пачка инстансов для разных кортежей аргументов. в серьёзном коде не встречал, но в принципе тоже решение

Nick-By Автор вопроса
Cheese Syrowiecki
9. раскаррировать! класс и пачка инстансов для раз...

Data.Optional как раз так и работает:data Optional a = Default | Specific a instance IsString a => IsString (Optional a) instance Num a => Num (Optional a) instance Fractional a => Fractional (Optional a)

Nick By
Data.Optional как раз так и работает:data Optional...

нет, я про другое совсем: class MyVariadicFunArg arg where myVariadicFun :: arg -> IO () instance MyVariadicFunArg (Int, String) ... instance MyVariadicFunArg (String, String, String) ... instance MyVariadicFunArg (Text, Handle) ...

Nick-By Автор вопроса
Cheese Syrowiecki
нет, я про другое совсем: class MyVariadicFunArg ...

Так это и есть почти что ViewPatterns, но определенные через класс Разве нет? Но в любом случае я попробую :?

Nick By
Так это и есть почти что ViewPatterns, но определе...

все решения эквивалентны, а ViewPatterns — это конкретный синтаксис, использующийся, например, в named. как ViewPatterns помогают опциональные параметры передавать?

Nick By
Так это и есть почти что ViewPatterns, но определе...

ViewPatterns — это грубо говоря сахар для let, ничего общего с классами f (g -> p) = x === f x' = x where p = g x'

Nick-By Автор вопроса
Cheese Syrowiecki
все решения эквивалентны, а ViewPatterns — это кон...

https://stackoverflow.com/questions/7781096/is-there-a-better-way-to-have-optional-function-arguments-in-haskell

Nick By
https://stackoverflow.com/questions/7781096/is-the...

а, так это решение с Maybe, только присыпанное сахаром

Nick By
https://stackoverflow.com/questions/7781096/is-the...

ну там же пишут не "через view-паттерны можно сделать дефолты", а "через вью-паттерны можно дефолты указывать слева от =" дефолты там через Maybe решение там хорошее, так делает named (то плюс еще своя обвязка именованых)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта