Buenas, en este ejercicio la parte de resolver con recursión explícita, la hice así
decimal :: [Int] -> Int
decimal = snd . parseo
where
parseo [x] = (1, x)
parseo (x:y:xs) = (e+1, x * 10 ^ e + s)
where
(e, s) = parseo (y:xs)
donde parseo va contando en la primer componente de la tupla cuantas veces entró en la recursión, para saber a cuanto elevar la potencia de 10, y a su vez aprovecho para devolver en s la suma de los dígitos menos significativos, por ejemplo en [1,2,5] cuando está en 1 el llamado recursivo le devuelve en la primer componente el exponente 2 y en la segunda componente le devuelve 25 y hace 1 * 10^2 + 25.
Ahora, la parte que pide hacerlo como foldl no me doy cuenta, dado que foldl va consumiendo la lista de izquierda a derecha, no tengo forma de obtener información del último elemento y pasarselo al primero, si pudiera hacerlo usando foldl tal vez pero como foldl (o sea usando exclusivamente foldl y nada más) no se me ocurre.
Agradezco cualquier ayuda!