http://www.colorless-sight.jp/wiki/?ProjectEular%2FProblem18
[[ProjectEular]] -- Problem 18 module Main (main) where main :: IO () main = do triangle_str <- getContents print $ problem18 $ to_triangle triangle_str to_triangle :: String -> [[Int]] to_triangle = map (map read . words) . lines problem18 :: [[Int]] -> Int problem18 tri = max_sum tri 0 0 max_sum :: [[Int]] -> Int -> Int -> Int max_sum tri i j | i+1 == length tri = tri !! i !! j | otherwise = tri !! i !! j + max left right where left = max_sum tri (i+1) j right = max_sum tri (i+1) (j+1)