Closed Hexirp closed 4 years ago
See https://github.com/Hexirp/hexirp-hakyll/issues/98 . Fix https://github.com/Hexirp/hexirp-hakyll/issues/111 .
Hexyll.Core.Provider を書き直した。 Provider 型を MonadProvider という型クラスに変更した。最初は Identifier 型でファイルを管理しなければならないという固定概念のせいで設計が固まらなくて時間を取られたが、最終的には Path 型を直接使うことで設計が固まった。
Provider
MonadProvider
Identifier
Path
設計としては MonadMetadata と MonadStore の合成のような感じになった。関数の名前はもう少し練りたい。キャッシュのために MonadStore を条件とすることになった。 MonadMetadata は、そもそも MonadProvider から Metadata 型に関する作用を外して、メタデータも Compiler 型により生成されるということにすることに決めたので、条件としなかった。元々のメタデータは生成方法が Provider 関連で決められていて変更できなかったのを変更できるようにする。 MonadMetadata は一つのリソースに一つのメタデータがあると規定しているが、これを除くことも考えている。
MonadMetadata
MonadStore
Metadata
Compiler
マージした後は色々な型クラスのインスタンスを定義する予定。
See https://github.com/Hexirp/hexirp-hakyll/issues/98 . Fix https://github.com/Hexirp/hexirp-hakyll/issues/111 .
Hexyll.Core.Provider を書き直した。
Provider
型をMonadProvider
という型クラスに変更した。最初はIdentifier
型でファイルを管理しなければならないという固定概念のせいで設計が固まらなくて時間を取られたが、最終的にはPath
型を直接使うことで設計が固まった。設計としては
MonadMetadata
とMonadStore
の合成のような感じになった。関数の名前はもう少し練りたい。キャッシュのためにMonadStore
を条件とすることになった。MonadMetadata
は、そもそもMonadProvider
からMetadata
型に関する作用を外して、メタデータもCompiler
型により生成されるということにすることに決めたので、条件としなかった。元々のメタデータは生成方法がProvider
関連で決められていて変更できなかったのを変更できるようにする。MonadMetadata
は一つのリソースに一つのメタデータがあると規定しているが、これを除くことも考えている。マージした後は色々な型クラスのインスタンスを定義する予定。