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

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

нас модуль и посмотреть на объявленные функции, типы и классы. В самом низу страницы находится ссылка

к исходникам пакета.

“Домашняя страница” пакета была создана с помощью приложения Haddock. Оно генерирует документа-

цию в формате html по специальным комментариям. Haddock встроен в cabal, например мы можем сделать

документацию к нашему пакету hello. Для этого нужно переключиться на корневую директорию пакета и

вызвать:

270 | Глава 18: Средства разработки

cabal haddock

После этого в директории dist появится директория doc, в которой внутри директории html находится

созданная документация. Мы можем открыть файл index. html и там мы увидим “иерархию нашего” модуля.

В модуле пока нет ни одной функции, так получилось потому, что Haddock помещает в документацию лишь

те функции, у которых есть объявление типа. Если мы добавим в модуле Hello. hs: к единственной функции

объявление типа:

helloWorld :: String

helloWorld = hello ++ ”, ” ++ world ++ ”!”

И теперь перезапустим haddock. То мы увидим, что в модуле Hello появилась одна запись.

Комментарии к определениям

Прокомментировать любое определение можно с помощью комментария следующего вида:

-- | Here is the comment

helloWorld :: String

helloWorld = hello ++ ”, ” ++ world ++ ”!”

Обратите внимание на значок “или”, сразу после комментариев. Этот комментарий будет включен в

документацию. Также можно писать комментарии после определения для этого к комментарию добавляется

значок степени:

helloWorld :: String

helloWorld = hello ++ ”, ” ++ world ++ ”!”

-- ^ Here is the comment

К сожалению на момент написания этих строк Haddock может включать в документацию лишь латинские

символы. Комментарии могут простираться несколько строк:

-- | Here is the type.

-- It contains three elements.

-- That’s it.

data T = A | B | C

Также они могут быть блочными:

{-|

Here is the type.

It contains three elements.

That’s it.

-}

data T = A | B | C

Мы можем комментировать не только определение целиком, но и отдельные части. Например так мы

можем пояснить отдельные аргументы у функции:

add :: Num a => a

-- ^ The first argument

-> a

-- ^ The second argument

-> a

-- ^ The return value

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

data T