Concurrent Clean : String2 : さらに検討
その上で、さらに少し書き換えてみて気づいたこと。
String2ではFinger treeの要素として、
:: String2Elem = {cArr :: !{#Char} ,sInd :: !Int ,eInd :: !Int }
というレコードを生成している。で、どうもこのレコードの生成・アクセスコストがかなり影響しているのではないかという気がする。
これは、String2のデータ型を
:: String2 = ST !String2Elem | FT !(FingerTree Int String2Elem)
としたところ、かなりの性能劣化が確認できたためだ。
ところで、すでに文字配列のコピーが十分速いことは確認済なので、このようなレコードを作って、文字配列のコピーをけちる必然性はない。
なので、このレコードそのものをなくすことで、より効率を改善することができるかもしれない。