Я хочу написать программу Haskell, которая запрашивает информацию о репозитории darcs. Вместо того, чтобы вызывать исполняемые darcs и анализировать результаты, я предпочел бы использовать библиотеку darcs напрямую. сказал, что "очень много работает" и "не имеет стабильного API" , но кажется полезным.
Думаю, я мог бы ответить на мои вопросы, изучив исходный код darcsden, например, начиная с этого модуля, но я думаю, что это может быть полезно не только для меня, если кто-то знающий предоставит прокомментированное введение для дополнения такого исследования.
Итак, вот конкретный пример.
Как я могу вычислить для данного файла самый последний патч, который затронул его вместе с датой, автором и именем патча? Было бы полезно, если вы объясните функции библиотеки ключей, используемые в вашем решении.
Edit:
Вот некоторые замечания, которые могут быть неочевидны для кого-то, незнакомого с исходным кодом darcs. Я узнал их из Джейсон Дагит, главный тезис и надеюсь, что они будут полезны для понимания ответа, данного Ганесом.
В Darcs патчи имеют предварительный и постконтент, представляющий состояние хранилища до и после применения патча. В исходном коде эти типы моделируются с использованием типов phantom типа патчей. Эти типы phantom называются свидетелями, а seal2
используется для их устранения.
В списках патчей в типе представлен только первый предварительный контекст и последний пост-контекст. Все остальные контексты скрыты с использованием экзистенциальных типов. Darcs определяет форвардные списки (называемые FL) и обратные списки (называемые RL). Обратные списки хранят патчи в обратном (хронологическом) порядке (по модулю исправления патча, выполняемого darcs). Обратные списки могут использоваться для доступа к последнему патчу в позиции головы. Все функции с RL в их имени создают или работают с такими обратными списками.