0

必要に応じて画像のスケーリングを実行する Readmeの例を使用hakyllして実装しようとしています。与えられた例では型が統一されていないため、進め方についてアドバイスを求めています。hakyll-imageshakyll-images

hakyll-imagesReadmeの失敗例を以下に示します。

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、 によって定義された type が、 によってtypeclass のインスタンスであるloadImage必要があるためです。hackage のドキュメントからコピーしたおよびから使用される関数の型を以下に示します。compileWritablehakyllhakyll-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モジュールのドキュメントにリンクされていません。

いずれにせよ、 の Readme の例は、 のインスタンスではhakyll-imagesないためにコンパイルされないようです。おそらく、ある時点でパッケージが非同期になり、例がコンパイルされなくなったのではないかと思っています。ImageWritablehakyll-imageshakyll

この評価は正しいと思いますか?解決策にどのようにアプローチできるかについて、あなたは何を提案しますか?

私は考えています:

  • のインスタンスをhakyll-images何らかの形で追加して更新しています。WritableImage
  • 他の関数のセットまたは組み合わせを使用して、アスペクト比を維持する画像スケーリングを実行します。
  • 捨てhakyll-imagesて、画像をスケーリングする他の方法を見つけます。
4

1 に答える 1