52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 316

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 316

rnf (St a b) = rnf (rnf a, rnf b)

instance NFData Way

where

instance NFData Name where

pair1 = (St Orange DnoBolota, St Green Prizrak)

pair2 = (St Red Lao, St Blue De)

test name search = bgroup name $ [

bench ”1” $ nf (uncurry search) pair1,

bench ”2” $ nf (uncurry search) pair2]

main = defaultMain [

test ”Set”

connectSet,

test ”Hash” connectHashSet]

Оценка быстродействия с помощью criterion | 285

Экземпляр для класса NFData похож на экземпляр для Hashable. Мы также определили метод значения

через методы для типов, из которых он состоит. Класс NFData устроен так, что для типов из класса Enum мы

можем воспользоваться определением по умолчанию (как в случае для Way и Name).

Теперь перейдём в командную строку, переключимся на директорию с нашим модулем и скомпилируем

его:

$ ghc -O --make Speed.hs

Флаг -O говорит ghc, что не обходимо провести оптимизацию кода. Появится исполняемый файл Speed.

Что мы можем делать с этим файлом? Узнать это можно, запустив его с флагом –help:

Мы можем узнать какие функции нам доступны, набрав:

$ ./Speed --help

I don’t know what version I am.

Usage: Speed [OPTIONS] [BENCHMARKS]

-h, -?

--help

print help, then exit

-G

--no-gc

do not collect garbage between iterations

-g

--gc

collect garbage between iterations

-I CI

--ci=CI

bootstrap confidence interval

-l

--list

print only a list of benchmark names

-o FILENAME

--output=FILENAME

report file to write to

-q

--quiet

print less output

--resamples=N

number of bootstrap resamples to perform

-s N