import Data.List (isInfixOf) import Data.Char (intToDigit) isSuperd :: (Show a, Integral a) => a -> a -> Bool isSuperd p n = (replicate <*> intToDigit) (fromIntegral p) `isInfixOf` show (p * n ^ p) findSuperd :: (Show a, Integral a) => a -> [a] findSuperd p = filter (isSuperd p) [1 ..] main :: IO () main = mapM_ (putStrLn . ("First 10 super-" ++) . ((++) . show <*> ((" : " ++) . show . take 10 . findSuperd))) [2 .. 6]