Это выглядит не совсем правильно для меня. print
возвращает IO ()
, что не Int
, а секция let
, похоже, вообще не приводит к выражению, а x
не определено. Вы пытались написать рекурсивную функцию?
summ [] = 0
summ (x:xs) = x + summ xs
Рекурсия не является синтаксисом; это просто использует два частичных определения функции с сопоставлением с образцом. Один из них снова вызывает summ
, что является рекурсией, и в конечном итоге (с учетом конечного списка) этот вызов приведет к более простой, нерекурсивной функции. Шаблон также деконструирует список в начало и конец, поэтому функция эквивалентна:
summ xs = if null xs
then 0
else head xs + summ (tail xs)
Обратите внимание, что ветви then
и else
являются выражениями одного типа.
Каждое из этих определений имеет тип summ :: Num t => [t] -> t