質問: ``` ### 解決したい問題点 * TODOの部分の実装は今の自分の力でも無理やり実装しようと思えばできるけど、効率の良いhaskellらしいコードにするにはどんなやり方があるか。 * `some`とかの関数と`Or`とかのコンストラクタが利用側では同じように使えるべきだが、キャメルケースとパスカルケースで違う見た目になっている。 * `superPosition`とか`oneOrMore`という名前付けが他のものと一貫性が取れてない。もっと良い名前がないか? * `some`とか`or`とかの名前付けだと利用側で名前衝突が起こる可能性があるかも?ないかも?初心者だからこの名前付けが良いのか悪いのかも分からない。 * `range`に負の整数を指定できてしまう 他にも私には分からない問題点があると思うので、そちらにもリファクタリングやマサカリをお願いします。 「regexは他にあるから車輪の再発明だ」っていうマサカリだけは無しでお願いします。 勉強のために車輪の再発明をしています。 そもそもRegexは`String -> Bool`の型シノニムとした方がいいんですかね?
回答: > > - TODOの部分の実装は今の自分の力でも無理やり実装しようと思えばできるけど、効率の良いhaskellらしいコードにするにはどんなやり方があるか。 > > > マッチの部分は(手続きプログラミングでも)オートマトンを使って実装するのが定番だと思います。オートマトンについてはすみませんが他を参考にしてください。 > > - `some`とかの関数と`Or`とかのコンストラクタが利用側では同じように使えるべきだが、キャメルケースとパスカルケースで違う見た目になっている。 > > > ``` or = Or ``` として `or` を定義することができます。 > > - `superPosition`とか`oneOrMore`という名前付けが他のものと一貫性が取れてない。もっと良い名前がないか? > > > いい案が思い付かないのでノーコメントで。 > > - `some`とか`or`とかの名前付けだと利用側で名前衝突が起こる可能性があるかも?ないかも?初心者だからこの名前付けが良いのか悪いのかも分からない。 > > > 名前空間があるので問題ないと思います。 例えばこれが `Regex` モジュールだった場合、利用者は `Regex.some` という形で参照することができます。(他の方法もあります。) > > - `range`に負の整数を指定できてしまう > > > `Int` の代わりに `Word` で非負整数を表します。