-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hexyll.Core.Identifier.Pattern をリファクタリングする #67
Comments
|
躊躇なく新しい設計を組み立てようとする。具体的には |
jaspervdj/hakyll@d2aaf33 と jaspervdj/hakyll@86ede74 が関わっているみたい? |
Dependencies を扱うために必要なそうで。具体的には https://github.com/Hexirp/hexirp-hakyll/blob/a1dd75a18c5b3a55c2684326d93896c4c1e1d672/hexyll-core/src/Hexyll/Core/Dependencies.hs の所。 |
hexirp-hakyll/hexyll-core/src/Hexyll/Core/Dependencies.hs Lines 78 to 81 in a1dd75a
あっ。 |
対策するためには、別々の型にするとかかな? |
regex-applicative を使うのはやめておこう。 Eq でも Show でもなくなるから。 |
あー、でも、直接 Pattern に変換すればいいのか? |
まあ、ここがあかんのだよね。
|
ここもあかん。
その原因は
|
なんで普通に列挙しないでパターンも許しているの? |
OldPattern の中で代替できなさそうなのは capture 関連か。ここの意味がよくわからない。 |
「型を合わせる」とは coerce で済む作業である。 |
capture は使われていないので消す。 |
capture はこんな感じのようだ。つまりワイルドカードにマッチした箇所をリストにして返す。マッチしなかったら hexirp-hakyll/hexyll-core/unit-test/Hexyll/Core/IdentifierTest.hs Lines 27 to 48 in a33414b
そして fromCapture は hexirp-hakyll/hexyll-core/src/Hexyll/Core/Identifier/Pattern.hs Lines 300 to 306 in a33414b
|
てゆーか、これ regex-applicative を使えば行ける話じゃん。 |
PatternData と Pattern の Monoid 構造は compile により準同型になっている。 |
ドキュメントを追加したけど、なんか見づらいような気がする。 |
こことか hexirp-hakyll/hexyll-core/src/Hexyll/Core/Rules.hs Lines 132 to 136 in f53a6e4
ここで hexirp-hakyll/hexyll-core/src/Hexyll/Core/Routes.hs Lines 128 to 135 in f53a6e4
古い Pattern が使われている。 |
うーん、 |
そもそも現実的には |
なぜ |
Fix #67 . Hexyll.Core.Identifier.Pattern をリファクタリングする。実際には Pattern モジュールを OldPattern モジュールにリネームして Pattern モジュールに新しい実装を作成するという形となった。 まだ不完全であるが、これ以上は Dependencies モジュールやその他の 上流モジュールでの使われ方を見てから作業したいので、ここで終わりに することにした。
See #67 . See #68 . See #69 . 再び `Hexyll.Core.Identifier.Pattern` をリファクタリングする。 前にも同じような作業を行ったが、そのプルリクエストに書いた通り、 それはたたき台としての実装でありまだ不完全であった。そのため、 `Hexyl.Core.Dependencies` など他のモジュールでの使われ方を見て から、さらにリファクタリングを行う予定であった。 実際にそうした結果、たたき台としてのものは実際の用途に合っていない ことが分かったため再びリファクタリングすることになった。 まず、たたき台としての実装は `Monoid` のインスタンスが本当の モノイドになっていないという問題を解決しようと試みるものであった。 そのために `(.||.)` と `complement` を排除した代わりに `Binary` の インスタンスを持つ `PatternData` と、自由に `(.||.)` や `complement` を使える代わりに `Binary` のインスタンスを持つ `Pattern` に分離した。 しかし、 `Binary` のインスタンスを持つということは重要な性質である ことが分かったため、論理的な操作を自由に使えるが `Monoid` の インスタンスを持たない `PatternExpr` を定義することにした。 そして、それをリストで包んでモノイドにした `PatternConj` と `PatternDisj` を定義した。この両者は `match****` 関数において モノイドの作用が `(.&&.)` と `(.||.)` のどちらかとして扱われるかに よって区別される。また、真なる自由なパターンを表すものとして `Pattern` を残した。 `Hexyll.Core.Dependencies` など普通の用途としては `PatternExpr` を使い、 `Hexyll.Core.Rules.Internal` など `Monoid` のインスタンスが 要求される個所では `PatternConj` か `PatternDisj` を使うことを 想定している。 この変更により、実際の用途まで踏み込んでいなかったドキュメントにも 実際の用途についての有意義な情報を書けた。 テストはまだ記述していないが、それは後で実装する。また、 `NFData` の インスタンスも作成したい。
きちんとした Monoid になっていない、そもそも DSL の形が気に入らない、ベースに regex-tdfa を採用している、など気に入らない所がいっぱいある。
言語拡張も Internal モジュールを統合したので必要なくなった。
The text was updated successfully, but these errors were encountered: