{-# OPTIONS_GHC -Wall #-} toDigits :: Integer -> [Integer] toDigits a | a<=0 =[] |otherwise = reverse(toDigitsRev(a)) toDigitsRev :: Integer -> [Integer] toDigitsRev a | a<=0 =[] | otherwise = mod a 10 : toDigitsRev (div a 10) intListLength :: [Integer] -> Integer intListLength [] = 0 intListLength (x:xs) = 1 + intListLength xs doubleEveryOther :: [Integer] -> [Integer] doubleEveryOther [] = [] doubleEveryOther [a] = [a] doubleEveryOther (a:b:fin) | (intListLength (a:b:fin) `mod` 2 <= 0 )= a*2:b:doubleEveryOther fin | otherwise = a: b*2 :doubleEveryOther fin sumDigits :: [Integer] -> Integer sumDigits [] = 0 sumDigits (a:as) = sum(toDigits a) + sumDigits as validate :: Integer -> Bool validate a = (mod (sumDigits(doubleEveryOther(toDigits a))) 10 <= 0)