Monalog

3140人のHaskell好きが訪れました

絶望、まるで書けないHaskell

2026/02/03

この数日、ルーティング機能に取り組んでいた。Markdownパーサーを良い感じに書いたつもりの僕は気分が良かった。Haskellが何かを理解したつもりだった。でもそれはルーティングのコードを書き始めると全くの見当違いだったことに気がついた。ぜんぜん意図通りに書けないのだ。

リクエストデータをパースし、パス情報を抜き出し、該当ファイルを読み込んで表示するだけである。しかし手癖でどうしても手続き的にコードを思考してしまうからか、そんな書き方はできないとエラーになる。Guardとcase..oflet..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
  _ -> Nothing

Maybe だらけのコードが増えていく。

戻る