■ [Haskell] 正規表現のパーサーをApplicativeで(おまけ) せっかくパースしたのでマッチも。 とりあえずNFAに変換します。NFAの各ステートは、入力文字列から次のステートと残りの入力への関数と考えられます。 data NFAState a = NFAState { runNFA :: [a] -> [(NFAState a, [a])] } | NFAEndState compile :: Regex -> NFAState Char compile (Regex branch) = compileBranch NFAEndState branch compileBranch :: NFAState Char -> Branch -> NFAState Char compileBranch next branch = NFAState $ newState where