Concurrent Clean: AltEnvでの文字列表現

今作業中のAltEnvというのは、StdEnvの関数を再定義して、さらに不足している関数を補って、もっとスマートな標準ライブラリを整備しようという取り組みなのだ。
で、その中で、文字列表現として、3つの表現をサポートすることにしている。なぜ3つもサポートするかというと、パフォーマンス上の特性の違う3つに対して互換性のある関数を提供することで、チューニングを簡単に行うことができるようにするという意図がある。
選択した3つの表現とは、次の3つだ。

  • [#Char]
  • {#Char}
  • String2 :== FingerTree Int {#Char}

もっとも一般的に使うのが{#Char}で、もっともコンパクトな表現であり、適度なサイズの文字列に対して最適なパフォーマンスを提供する。
[#Char]は、文字列の頭部に対して、パターンマッチを使った操作を行うのに適している。
String2は、長いサイズの文字列に対して、最適なパフォーマンスを提供する。

      • -

ただ、標準のParserライブラリは、[Char]で使わないとダメなんだよな・・・
一番下のトークン化の処理は、Parserライブラリではなくて、文字列ライブラリ側で提供するというのも一案。多分、そのような扱いにする方がパフォーマンスが出ると思うから、それの方がよいかも。