エラストテネスのふるい

エラストテネスのふるいを書きました

erast t = let list = [2,3..t]
              erasti [] = []
              erasti (x:xs) = x : erasti (filter (\y -> (y `mod` x) /= 0) xs)
          in
          erasti list

ふるいに用いられる数字は素数であることが確定するので、再帰的に書けます。