Бинарная сериализация в Haskell: использование библиотеки derive
В рамках борьбы с велосипедизмом, я просто обязан написать про библиотеку derive. Служит она для автоматической генерации инстансов разных классов (смотрите документацию каких именно, там много). Меня эта библиотека заинтересовала, прежде всего, как генератор для Data.Binary, которая очень удобна как быстрый бинарный сериализатор над Data.ByteString.Lazy. У себя на сайте я использую Data.Binary для кеширования данных. Derive умеет генерировать как обычный код внутри .hs файлов, так и создавать инстансы во время компиляции с помощью Template Haskell.
Генератор внутри .hs у меня глючит, имейте ввиду если что. Из описанных в документации способов нормально работает только такой:
|
|
С последующим вызовом
|
|
который допишет в ваш файл нужный инстанс.
Работа через Template Haskell вопросов не вызвала (да и вообще этот способ проще в использовании):
|
|
Проверяем:
|
|
Немного об инсталляции derive. Она зависит от haskell-src-exts, которой, в свою очередь, нужен установленный happy. Happy компилируется в обычный бинарник и ставится в (если ставить cabal-ом в home), так что перед установкой derive поставьте сначала happy и убедитесь что в PATH у вас есть нужный путь.
UPD: Happy входит в состав Haskell Platform (2011.2.0.0 во всяком случае), так что если есть Haskell Platform, то happy тоже есть.