絶望、まるで書けないHaskell
2026/02/03
この数日、ルーティング機能に取り組んでいた。Markdownパーサーを良い感じに書いたつもりの僕は気分が良かった。Haskellが何かを理解したつもりだった。でもそれはルーティングのコードを書き始めると全くの見当違いだったことに気がついた。ぜんぜん意図通りに書けないのだ。
リクエストデータをパースし、パス情報を抜き出し、該当ファイルを読み込んで表示するだけである。しかし手癖でどうしても手続き的にコードを思考してしまうからか、そんな書き方はできないとエラーになる。Guardとcase..ofとlet..in、do式の書き方が入り混じって意味不明なコードになり、もう絶望である。
思考を根本から変える必要がある。代数的データ型があり、再帰処理であり、パターンマッチである。Howを考えるのではなくWhatを考える。なんかそれっぽいことを言ってるけど、よく分かっていない。絶望だけど、それもまた楽しい。
ルーティングは一応動いている。おそらくこの記事は https://monalog.nanabit.dev/a/202602032200 というURLでアクセス可能になっているはずだ。
ルーティングを実装している中で出会った記法、Applicative Styleというらしい。
parseRequestLine :: ByteString -> Maybe (HttpMethod, ByteString, ByteString)
parseRequestLine line = case B.words line of
[m, p, v] -> (,,) <$> parseMethod m <*> pure p <*> pure v
_ -> NothingMaybe だらけのコードが増えていく。