必要に応じて画像のスケーリングを実行する Readmeの例を使用hakyll
して実装しようとしています。与えられた例では型が統一されていないため、進め方についてアドバイスを求めています。hakyll-images
hakyll-images
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
、 によって定義された type が、 によってtypeclass のインスタンスであるloadImage
必要があるためです。hackage のドキュメントからコピーしたおよびから使用される関数の型を以下に示します。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
モジュールのドキュメントにリンクされていません。
いずれにせよ、 の Readme の例は、 のインスタンスではhakyll-images
ないためにコンパイルされないようです。おそらく、ある時点でパッケージが非同期になり、例がコンパイルされなくなったのではないかと思っています。Image
Writable
hakyll-images
hakyll
この評価は正しいと思いますか?解決策にどのようにアプローチできるかについて、あなたは何を提案しますか?
私は考えています:
- のインスタンスを
hakyll-images
何らかの形で追加して更新しています。Writable
Image
- 他の関数のセットまたは組み合わせを使用して、アスペクト比を維持する画像スケーリングを実行します。
- 捨て
hakyll-images
て、画像をスケーリングする他の方法を見つけます。