あともう一つのアプローチとして、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