content: divisors :: (Integral a) => a -> [a]
  divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
  
  data Class
    = Terminating
    | Perfect
    | Amicable
    | Sociable
    | Aspiring
    | Cyclic
    | Nonterminating
    deriving (Show)
  
  aliquot :: (Integral a) => a -> [a]
  aliquot 0 = [0]
  aliquot n = n : (aliquot $ sum $ divisors n)
  
  classify :: (Num a, Eq a) => [a] -> Class
  classify []             = Nonterminating
  classify [0]            = Terminating
  classify [_]            = Nonterminating
  classify [a,b]
    | a == b              = Perfect
    | b == 0              = Terminating
    | otherwise           = Nonterminating
  classify x@(a:b:c:_)
    | a == b              = Perfect
    | a == c              = Amicable
    | a `elem` (drop 1 x) = Sociable
    | otherwise           =
      case classify (drop 1 x) of
        Perfect  -> Aspiring
        Amicable -> Cyclic
        Sociable -> Cyclic
        d        -> d
  
  main :: IO ()
  main = do
    let cls n = let ali = take 16 $ aliquot n in (classify ali, ali)
    mapM_ (print . cls) $ [1..10] ++
      [11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488]
  