Haskellの関数foldrの型について
sum :: Num a => [a] -> a sum [] = 0 sum (x : xs) = (+) x (sum xs) sum = foldr (+) 0 --よって foldr :: (a -> b -> b) -> a -> [a] -> b --sumの場合はb=aだけど、b /= aのときってどんなとき? --そうだlengthを考えてみよう length :: [a] -> Int length [] = 0 length (x : xs) = (\_ n -> 1 + n) x (length xs) --(\_ n -> 1 + n)はλ式だね (\_ n -> 1 + n) :: Num a => b -> a -> a