Как согласовать типы между `hakyll` и`hakyll-images`
Я пытаюсь использовать hakyll
а также hakyll-images
реализовать пример из hakyll-images
Readme, который выполняет масштабирование изображения, как мне нужно будет сделать. Типы не объединяются для данного примера, и я ищу совет о том, как действовать.
Плохой пример из hakyll-images
Readme ниже.
import Hakyll
import Hakyll.Images ( loadImage
, scaleImageCompiler
)
main = hakyll $ do
-- Scale images to fit within a 600x400 box
-- Aspect ratio will be preserved
match "images/*" $ do
route idRoute
compile $ loadImage
>>= scaleImageCompiler 600 400
Попытка компиляции дает ошибку:
site.hs:12:9: error:
• No instance for (Writable
hakyll-images-0.3.1:Hakyll.Images.Common.Image)
arising from a use of ‘compile’
• In a stmt of a 'do' block:
compile $ loadImage >>= scaleImageCompiler 600 400
In the second argument of ‘($)’, namely
‘do route idRoute
compile $ loadImage >>= scaleImageCompiler 600 400’
In a stmt of a 'do' block:
match "images/*"
$ do route idRoute
compile $ loadImage >>= scaleImageCompiler 600 400
|
12 | compile $ loadImage >>= scaleImageCompiler 600 400
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ошибка в том, что тип Image
, определяется loadImage
требуется compile
быть экземпляром класса типов Writable
, Типы функций, используемые из hakyll
а также hakyll-images
, скопированные из хакерской документации, приведены ниже.
route :: Routes -> Rules ()
idRoute :: Routes
compile :: (Binary a, Typeable a, Writable a) => Compiler (Item a) -> Rules ()
loadImage :: Compiler (Item Image)
scaleImageCompiler :: Width -> Height -> Item Image -> Compiler (Item Image)
Image
определяется в hakyll-images
как type Image = Image_ ByteString
, Я не уверен что Image_
является; его определение не связано в этой документации для Hakyll.Images
модуль.
В любом случае, похоже, что пример из hakyll-images
Readme не компилируется из-за Image
не являясь примером Writable
, Мне интересно, если возможно hakyll-images
пакет не синхронизирован с hakyll
в какой-то момент ведущий к примеру больше не компилируется.
Эта оценка кажется правильной? Что вы предлагаете для того, как я могу подойти к решению?
Я рассматриваю:
- обновление
hakyll-images
каким-то образом добавивWritable
экземпляр дляImage
, - Использование некоторого другого набора или комбинации функций для выполнения масштабирования изображения с сохранением пропорций.
- рытье канав
hakyll-images
и найти другой способ масштабирования изображений.
1 ответ
Такое поведение является ошибкой, попавшей в выпуск hakyll-images 0.3.1. Это было впоследствии исправлено в hakyll-изображениях 0.4 и выше. Просто обновитесь до последней версии, чтобы избавиться от этой проблемы.
Это был грубый недосмотр, и тесты были добавлены так, что это больше не повторится.
Если вы хотите реализовать экземпляры самостоятельно, вы можете посмотреть, как это делается здесь.