前回に続き、Haskellでmarkdown -> はてな記法の変換パーサを書いてみた話。
前回の最後に書いたToDoは以下の通り。
- リスト表記のインデント表記に対応
- インライン記法への対応
昨日、今日と帰宅してからの数時間を費やしたところ、
意外にあっさりと解決できた。
まあ、仕組み上実現可能であることは明らかなのだから、そりゃ出来るだろうって話だが、
Haskellレベルが1ぐらい上がった感じで、ちょっと嬉しかったり。
昨日、Parsecをいじっていた時に、GenParser tok st aの型はこうやって使うのか!と天啓が降りてきて、なんか色々と書けるようになった。
分かんねえなーと思ってたものが、こうすりゃちゃんと動くんじゃね?という想定通りに動くと非常に気持ちいいということを、改めて実感した。
Haskellが抽象的な型の変換で処理を捉えるということについて、ちょっとだけ理解できたかもしれない。
とは言え、IOモナドみたいな一方向モナドを利用する機会が出てきたら、また地獄を見るんだろうな。
モナド合成とか理屈は分かってきたが、活用できる気がしねえ・・・。
というわけで、現在対応しているのは以下の記法。
- 頭に#をつけるタイプの見出し記法。見出しレベル対応。
- 順序無しリスト(スペース4つ、もしくはタブ1つで1レベルインデント)
- 順序付きリスト(スペース4つ、もしくはタブ1つで1レベルインデント)
- ノーマルなパラグラフ
- 見出し、リスト、パラグラフ中に存在するリンク記法
今後のToDo
- コードブロック対応
- 引用ブロック対応
- 画像貼りつけ対応