Yuji Yamamoto (山本悠滋)
2019-10-18 Regex Festa
ApplicativeやAlternativeという型クラスのメソッドが中心なので慣れていればわかりやすいマッチさせるのに使う関数(他にもある)
RE s a型の値と、対象の文字列
[s]型の値を受け取ってマッチした結果を返す
ただの文字: sym
連接: *>・string
選択: <|>
繰り返し: many・some
many、1回以上がsomeオプショナルなマッチ: optional
マッチした結果をHaskellの値に割り当て
マッチした結果をHaskellの値に割り当て、さらに計算!
<$>:
左辺に渡した関数を、右辺に渡した正規表現でマッチした結果に渡すもうちょっと複雑な例: まずは部品作り
<$>や<*>でOrigin関数一つ一つの引数に割り当てる<|>とpureを使うとマッチに失敗した場合のデフォルト値を指定できる
pure:
空文字列にしかマッチしないけど値は返す正規表現を作るもうちょっと複雑な例: まずは部品作り(続き)
もうちょっと複雑な例: 使ってみる
マッチ結果の構造体への割り当て: まずは構造体の定義
String以外の文字列にはマッチできない…
※正規表現技術入門 p. 56より
😕どちらでもなさそう?
s -> [Thread s r]の実行が成功したとき
[Thread s r]の要素をすべてキューに追加して、引き続き実行するs -> [Thread s r]の実行が失敗したとき
Threadに切り替えるThreadを一つずつ実行してみて、結果が条件に合うものを選ぶ、といった方が近い
findLongestPrefix関数などはそうした処理特性によって実現ApplicativeベースのAPIなので、ぱっと見よく似てる