リスト内包表記で書きました
ダブル完全数です。この前はリスト内包表記のことをすっかり忘れていましたが、今回は覚えていましたよ。
main = do print $ [x | x <- [1..10000], (x * 2) == sumOfAliquots(x)] sumOfAliquots :: Int -> Int sumOfAliquots n = sum $ aliquots n where aliquots :: Int -> [Int] aliquots n = filter (\x -> (n `mod` x) == 0) [1..(n `div` 2)]
これでも動きますが、参考にするならanekosさんの投稿の方が良いかも。