ネストした関数を可視化するユーティリティ

2015/4/16の記事 VBAHaskellの紹介その7(bind1stとbind2nd) で記述に誤りがあった。bind1stとbind2ndの中身がどうなっているかの説明で、bind1stで上書きされない変数を上書きされると間違えていたのだ。
VBAHaskellの関数は配列なので直接見えないし、ネストされているものがあるから、bind1stやbind2ndでどう変更されるのかが非常にわかりにくい。そこでそれを可視化するユーティリティを作って Haskell_3_printMモジュール に入れた。

'ネストした関数を文字列化
Function dumpFun(ByRef x As Variant) As Variant

これによって、関数の入れ子状態や変数の束縛状況、プレースホルダの配置などがある程度分かる。束縛された値は数値や文字列の場合はそのまま出力し、配列などそのまま出力できないものは * 表示する。プレースホルダについては、暗黙のプレースホルダは _ 、ph_1 と ph_2は _1 と _2 で表した。
表示例は以下の通り。

f = p_plus(p_minus(ph_1, 5), p_mult(, ph_2))
? dumpFun(f)
F6828(F8556(_1, 5), F6644(_, _2))

? dumpFun(bind1st(f, 111))
F6828(F8556(111, 5), F6644(_, _2))

? dumpFun(bind2nd(f, 222))
F6828(F8556(_1, 5), F6644(222, 222))