P316のコードが動作しなかったので、ChatGPTから同等のものに書き直してもらったのがこちら。新しいライブラリMegaparsecを使うといいらしい。
Parser.hs
・type Parser =Parsec Void String :Voidがエラーの型(ない) Stringが入力の型
Parser a = Parsec Void String a
限られた使い方 aが結果 Parsecのほうがカスタマイズしやすいといえる
・try paraseIndex <|> try parseField <|> pure JqNil で<|>は左が失敗したら右ためす
tryは 失敗しても入力を消費せず次を代わりにためす (入力を巻き戻す)
・some letterChar : some 1回以上繰り返し letterChar a~zA~Zのパース
・option JqNil (char '.' *> filterRest <|> parseField)
option:: a -> Parser a -> Parser a
ディフォルト値->試すパーサ->失敗したら ディフォルトaを返す
char '.' *> filterRest : .を消費し、filterRest返す
ここではtry不要。すでにfilterRestの中でtryは終えているので
Parser a = Parsec Void String a
限られた使い方 aが結果 Parsecのほうがカスタマイズしやすいといえる
・try paraseIndex <|> try parseField <|> pure JqNil で<|>は左が失敗したら右ためす
tryは 失敗しても入力を消費せず次を代わりにためす (入力を巻き戻す)
・some letterChar : some 1回以上繰り返し letterChar a~zA~Zのパース
・option JqNil (char '.' *> filterRest <|> parseField)
option:: a -> Parser a -> Parser a
ディフォルト値->試すパーサ->失敗したら ディフォルトaを返す
char '.' *> filterRest : .を消費し、filterRest返す
ここではtry不要。すでにfilterRestの中でtryは終えているので