part1 :: (Gen, Gen) -> Int
part1 (a,b) = length $ filter (==0) $ take (40*10^6) $ zipWith bitcount ga gb
  where
    ga = generator $ a { _filter = 1 }
    gb = generator $ b { _filter = 1}

part2 :: (Gen, Gen) -> Int
part2 (a,b) = length $ filter (==0) $ take ( 5*10^6) $ zipWith bitcount ga gb
  where
    ga = generator a
    gb = generator b