ulado assim

somae1 x = somae2
           where somae2 y = x + y


-- Dizemos que a aplicação da função foldr é parcial… Não fornecemos
-- todos os parâmetros… Notem os tipos somafrp :: [Integer] -> Integer
-- A aplicação parcial de foldr retorna uma função como resultado. Na
-- verdade, ao invés de ver foldr como uma função que tem 3 parâmetros,
-- podemos ver como uma função que tem um parâmetro e retorna uma outra
-- função, que tem um parâmetro também e recebe outra função que recebe uma
-- lista e retorna um elemento de algum tipo.


-- Funções também podem ser representadas por expressões lambda. Valor
-- que denota uma função anônima. Similar a Java, mas bem mais limpo.
-- sizefrpl :: [a] -> Integer

sizefrpl = foldr (\x y -> 1 + y) 0

-- foldr soma 0
-- 
somae1 x = somae2
           where somae2 y = x + y


-- Dizemos que a aplicação da função foldr é parcial… Não fornecemos
-- todos os parâmetros… Notem os tipos somafrp :: [Integer] -> Integer
-- A aplicação parcial de foldr retorna uma função como resultado. Na
-- verdade, ao invés de ver foldr como uma função que tem 3 parâmetros,
-- podemos ver como uma função que tem um parâmetro e retorna uma outra
-- função, que tem um parâmetro também e recebe outra função que recebe uma
-- lista e retorna um elemento de algum tipo.


-- Funções também podem ser representadas por expressões lambda. Valor
-- que denota uma função anônima. Similar a Java, mas bem mais limpo.
-- sizefrpl :: [a] -> Integer
somae1 x = somae2
           where somae2 y = x + y


-- Dizemos que a aplicação da função foldr é parcial… Não fornecemos
-- todos os parâmetros… Notem os tipos somafrp :: [Integer] -> Integer
-- A aplicação parcial de foldr retorna uma função como resultado. Na
-- verdade, ao invés de ver foldr como uma função que tem 3 parâmetros,
-- podemos ver como uma função que tem um parâmetro e retorna uma outra
-- função, que tem um parâmetro também e recebe outra função que recebe uma
-- lista e retorna um elemento de algum tipo.


-- Funções também podem ser representadas por expressões lambda. Valor
-- que denota uma função anônima. Similar a Java, mas bem mais limpo.
-- sizefrpl :: [a] -> Integer