「は」制作で感動したこと

え? こんなことある?
と今感動してゐるので 忘れないうちに 書いておかうと思つた

今まで エディタのやうなものを制作しやうとして ゴチャゴチャやってきた經驗はあつた
基本的にjavascriptでやってゐたのだが 例へば
行が左端に達したら スクロールする といふ処理を書くのに 色々試行錯誤した記憶がある
イメージをコピーして ずらした位置にペーストするやうなことをやってゐた

今回 Haskellで エディタのやうなものを制作してゐるのだが
なんと このスクロール処理が 単にパラメータを引いたりしただけで實現できてしまつた
具體的には

makePicOsds :: [[Int]] -> [Float] -> State -> [Picture]
makePicOsds numList line st = 
  let txOsds = map (\ls -> map ((!!) (osds st)) (map abs ls)) numList
   in concat $ zipWith (\txos ln -> zipWith (\(Just t) (x,y) ->
        translate (startX-shiftX*x) (startY-shiftY*y) $ scale fScale fScale $ t)
                      txos [(a,b)|a<-[ln..],b<-[0..(_by st)]]) txOsds line

上のコードを

makePicOsds :: [[Int]] -> [Float] -> State -> [Picture]
makePicOsds numList line st = 
  let txOsds = map (\ls -> map ((!!) (osds st)) (map abs ls)) numList
   in concat $ zipWith (\txos ln -> zipWith (\(Just t) (x,y) ->
        translate (startX-shiftX*x) (startY-shiftY*y) $ scale fScale fScale $ t)
                      txos [(a,b)|a<-[(ln-_sx st)..],b<-[0..(_by st)]]) txOsds line

このやうにしただけだ

變はつたのは 一番下の行の ln のところが (ln-_sx st) になっただけである
スクロールするぶんだけ 表示行の初期位置をずらした といふだけで
スクロールが實現できてしまつた

もちろん Haskellでなくても 同じやうなアルゴリズムを用ひてゐれば
同様にできるのだらう
しかし このやうなことが出來ることに氣付かせてくれたのは 私にとつては
確實にHaskellである

もちろん カーソルの移動によるスクロール値の變化や
文章挿入時の処理に若干變更をしてゐるが ほとんど上のやうなレベルである
少なくとも 切つたり貼つたりといふ 新しい函數を作ることは 全くしなかつた
さう! javascriptでは 必ず スクロール処理の函數を書いてゐたものだ

断言したい
Haskell は 私にとつて 偉大な 師匠である!!