Я новичок в Haskell и надеюсь, что этот вопрос не глуп.
Я видел так много примеров, что когда у меня есть список, я могу сопоставить и привязать «элемент композиции» списка к отдельной переменной:
listSizeDesc :: [a] -> String
listSizeDesc [] = "Emtpy"
listSizeDesc (x:xs) = "Something inside"
Однако я попытался сделать что-то вроде:
foo :: Int -> String
foo 0 = "Zero"
foo (n - 1) = "next number is " ++ show n
Не работает.
Мне кажется, что и (n-1), и (x: xs) описывают, как аргумент «создается», и связывают «компонент» с аргументом. Разработан ли способ соответствия List специально для простоты рекурсии? Coz мне кажется, что эта логика сопоставления / привязки аргументов не применяется к другим функциям, кроме (:).