Я скопировал решение Euler.11, данное для (http://www.haskell.org/haskellwiki/Euler_problems/11_to_20#Problem_11),, но это не удалось с ошибкой индексации: " (Array.!): Неопределенный элемент массива ". Конечно, сначала я 'Мне бы хотелось более качественное сообщение об ошибке (!), возможно, даже с указанием неуспешного индекса, но не удалось, что я попытался отладить его.
Данные введены правильно, и в распечатке показаны правильные границы и данные.
Поэтому я добавил несколько сообщений трассировки как к выражению результата, так и к телу понимания. Я получил много результатов трассировки из окончательного выражения, но ни одного из вычислений тела. Почему?
prods :: Array (Int, Int) Int -> [Int]
-- trace ("xs: " ++ show xs) (product xs)
prods a = [trace ("xs: " ++ show xs) (product xs) | i <- range $ bounds a,
s <- senses,
let trace1 = check "i: " i,
let is = take 4 $ iterate s i,
let trace2 = check "is: " is,
all (inArray a) is,
let xs = map (a!) is]
-- Doit
-- euler = print . maximum . prods . input =<< getContents
euler eData = maximum . prods $ input eData
-- Debugging tracecheck :: String -> a -> a
check msg v | trace (msg ++ (show v)) True = v