改造中
やっぱ ?$label はかっこ悪いので $label にした。副作用:
- let f $(x:int) = ... とは書けない
- $ を binary op として使いたい場合は x $ y のようにちゃんとスペースを入れなければならない
$ を lexer token にしないための苦肉の策だが、まーそれでえーやろ。問題ありゃ parsing なんて後で変えればいいし。
動いているみたい:
# let f $x = x + 1;; val f : $x:int -> int = <fun> # f $x:1;; - : int = 2 # f ~x:1;; Characters 5-6: f ~x:1;; ^ Error: Expecting function has type $x:int -> int This argument cannot be applied with label ~x # let f $:x = x + 1;; val f : $:int -> int = <fun> # f $:1;; - : int = 2
lexer.mll, parser.mly, printtyp.ml をいじるぐらい。楽なもんだ。