あともう一つのアプローチとして、Alexが返す例外をパーサーコンビネーターなどでパースしてしまう、というやや遠回しな手もあるかと思います :sweat:
many
には本当に慎重になった方がいいです。x y z
を右結合の指定なしに Apply (Apply x y) z
という構文木にしたいのです。そのへんHappyがうまくやってくれますmakeExprParser
という関数がparser-combinatorsというパッケージにありまして :smirk:-K1k
と指定してみたのですが、うまくStackOverflowを起こすことができません。stack exec ghc -- -O0 -rtsopts -with-rtsopts=-K1k .\stackoverflow.hs
-XStrict
をつけたら溢れた。 :thinking_face:❯❯❯ stack run parse '(-12)' <stdin>:2:2: | 2 | (-12) | ^ unexpected '-' expecting '"', ''', '(', ')', ':', '[', digit, or integer