Я привык к тому, что в Python можно указать необязательные аргументы:
def product(a, b=2):
return a * b
Haskell не имеет аргументов по умолчанию, но мне удалось получить что-то подобное, используя "Maybe":
product a (Just b) = a * b
product a Nothing = a * 2
Это очень громоздко, если у вас есть несколько параметров. Например, что делать, если я хочу сделать что-то вроде этого:
def multiProduct (a, b=10, c=20, d=30):
return a * b * c * d
Мне пришлось бы иметь восемь определений multiProduct для учета всех случаев.
Вместо этого я решил пойти с этим:
multiProduct req1 opt1 opt2 opt3 = req1 * opt1' * opt2' * opt3'
where opt1' = if isJust opt1 then (fromJust opt1) else 10
where opt2' = if isJust opt2 then (fromJust opt2) else 20
where opt3' = if isJust opt3 then (fromJust opt3) else 30
Это выглядит очень нелогично для меня. Есть ли идиоматический способ сделать это в Haskell, который чище?