Je fais exactement ce que vous voulez en C. L'astuce consiste à dissimuler chaque caractère séparément, comme suit :
syn match ArrowHead contained ">" conceal cchar=▶
syn match ArrowTail contained "-" conceal cchar=─
syn match ArrowFull "->" contains=ArrowHead,ArrowTail
Il se peut que la tête ou la queue de flèche soit associée à un plein de flèche, malheureusement. Cela est dû au fait que les règles syntaxiques existantes utilisent contains=ALLBUT,...
ou quelque chose de similaire.
Pour résoudre ce problème en C, j'ai ajouté ArrowTail et ArrowHead au groupe cParenGroup, ce qui semble éviter tout problème.
syn cluster cParenGroup add=ArrowTail,ArrowHead
Vous devrez peut-être faire quelque chose de similaire pour Haskell.
Comme je n'utilise pas du tout la fonction de dissimulation par ailleurs, je dis à Vim d'aller de l'avant et de "dissimuler" les flèches TOUT le temps :
set conceallevel=1 concealcursor=nvic
BTW si vous n'aimez pas les couleurs par défaut pour les personnages cachés, vous pouvez les changer comme ceci :
hi conceal ctermfg=DarkBlue ctermbg=none guifg=DarkBlue guibg=none