Эффективное преобразование ByteString в шестнадцатеричное представление

Мне нужно было дать шестнадцатеричное представление хэша SHA512. Может быть, я просто недостаточно внимательно искал, но я мог найти любые функции на Hackage, чтобы сделать это. Поэтому я написал реализацию, используя unfoldrN.Это определенно достаточно быстро для моих целей, но мне интересно, знает ли кто-нибудь более быстрый подход.

Я выложил свою реализацию на Github как суть: https://gist.github.com/2356925. Файл также включает простую реализацию на основе Numeric.showHex, тест QuickCheck и эталонный критерий. Мои текущие результаты простой версии по сравнению с версией unfoldrNтаковы:

benchmarking simple
mean: 4.677296 ms, lb 4.656011 ms, ub 4.696684 ms, ci 0.950
std dev: 104.2791 us, lb 87.77023 us, ub 128.1627 us, ci 0.950
found 5 outliers among 100 samples (5.0%)
  4 (4.0%) low mild
variance introduced by outliers: 15.195%
variance is moderately inflated by outliers

benchmarking unfoldrN_MS1
mean: 370.0101 us, lb 365.9819 us, ub 373.8619 us, ci 0.950
std dev: 20.17016 us, lb 16.92772 us, ub 24.08982 us, ci 0.950
found 14 outliers among 100 samples (14.0%)
  7 (7.0%) low mild
  7 (7.0%) high mild
variance introduced by outliers: 52.467%
variance is severely inflated by outliers

Кто-нибудь хочет попробовать ее улучшить?

11
задан ДМИТРИЙ МАЛИКОВ 6 January 2014 в 20:05
поделиться