2012-07-31 3 views
2

Есть ли способ добавить документацию отладчика к объекту в модуле, который его экспортирует, а не тот, который его объявляет?Замечания отладчика для импортированных объектов

У меня есть скрытый модуль, который объявляет десяток типов или около того, а затем еще один модуль, который экспортирует только те части, которые должен видеть конечный пользователь. Было бы логично поставить документацию в открытый модуль, а не на скрытый. Но я не могу понять, как это сделать ...

+1

Я думаю, что имеет смысл разместить документацию в модуле, где объявляются типы. Haddock создаст файлы документов с правильной структурой для вас. Например, если у вас есть модуль 'Foo', который экспортирует типы' A', 'B' и' C' (с документацией) и модуль 'Bar', которые реэкспортируют только' A', тогда файлы doc для 'Bar' будет автоматически содержать соответствующую документацию для 'A', скопированную из модуля' Foo'. –

+0

@ ChrisTaylor Я знаю, что это будет _work_, это просто немного неэлегантно. Я сделаю это, если вокруг не будет никакого способа, но я хочу посмотреть, есть ли лучший способ в первую очередь. – MathematicalOrchid

+0

Вторичный Крис Тейлор. Когда люди читают ваш источник, они захотят получить документы по коду; я думаю, что все это касается смешивания док-кода и кода. Релевантный совет, который я только что узнал: если вы поместите некоторый код в неэкспортируемый подмодуль и хотите ссылаться на функции из другого не импортируемого модуля из вашего проекта, вы можете указать полный путь, например «Control.Foo.bar» и который будет отображаться как ссылка с текстом «bar» – jberryman

ответ

5

Нет, это невозможно. Функции могут иметь в-аргумент и за тип-пары документации, и это сделало бы документацию противоречивой, если вы могли бы:

  1. написать различные версии в разных местах
  2. есть одна версии замещают другой
  3. ввести несоответствия в аргументация: что, если вы переопределите основную строку документа для функции; следует ли удалить строки аргумента doc?

следующий файл:

module Bla 
     (-- * Fooishness 

     -- | This is 'foo'. It is not 'bar'. 
     foo 
     , -- * Barishness 

     -- | This is 'bar'. It is sometimes a little 'foo'. 
     bar 
     ) where 

-- | The actual foo documentation 
foo :: a --^The a 
    -> b --^The b 
    -> c 
foo = undefined 

-- | The actual bar documentation 
bar :: a 
bar = undefined 

... дает эту документация:

Haddock documentation

Как вы можете видеть, вы можете использовать раздел комментарии для рода эмулировать строки функции документации , но документация будет только сгенерирована должным образом, если вы будете использовать комментарии к документации по функциям подписями типов.

+0

Чтобы быть ясным: я не пытаюсь написать другую документацию для одного и того же объекта. Я просто хочу поместить всю документацию в один файл, открытый модуль, потому что это выглядит более логичным. Я знаю, что у Haddock есть способ настроить «домашний модуль» для объекта, я не был уверен, что это может позволить мне что-то сделать ... – MathematicalOrchid

0

Ну, подумайте об этом, я мог бы написать newtype в открытом модуле. Он не несет накладных расходов вовремя, это просто делает мой код немного более грязным ...

Смежные вопросы