'balloneval'を使ってみる/式の型を推論させる


ftplugin/haskell.vim

setlocal balloonexpr=system('echo\ :t\ '.substitute(v:beval_text,'&','^^^&','g').'\ \|\ ghci\ -v0\ '.expand('%'))[0:-2]
setlocal ballooneval

[0:-2] で末尾の改行文字を落とす。"&""^^^&"エスケープするのは Windows だからだけどなんで2回もエスケープさせられるんだろう?
まあ正直 ballooneval なんて使わなくて、

nnoremap <buffer> <silent> gK :echo system('echo :t '.substitute(expand('<cword>'),'&','^^^&','g').' \| ghci -v0 '.expand('%'))[0:-2]<CR>
vnoremap <buffer> <silent> gK y:echo system('echo :t '.substitute(@@,'&','^^^&','g').' \| ghci -v0 '.expand('%'))[0:-2]<CR>

これで十分なんだけど…。
Vim にはビジュアル選択された文字列を取得する方法がない(たぶん)。これでいろいろヤキモキしてたんだけど結局ユーザの能動的な行動の結果ならデフォルトのレジスタ潰しちゃっていいよね、という結論に達した。
インスパイヤ元: Type declarations made mechanical