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

26 просмотров

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 (то плюс еще своя обвязка именованых)

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта