HGL

Windows上で、HGLを使おうとした場合、うちで起こる現象
・ghciの場合→そもそも、窓が開かない
・runghcの場合→窓は開くし、場合によっては描画を行ったりもするものの、すぐ死ぬ。HGL何ですぐ死んでしまうん?
コンパイルした場合→実行ファイルをダブルクリックで実行して、開いたコンソールを最小化すると、普通に動く。


という謎の挙動をするのだけど、とりあえず動くらしい。古き七行プログラミングスレとか見て、Haskellも結構いける気がしたので、とりあえず、HGLで七行(80文字*7行)砂嵐。

--ghc -package HGL ***.hsでコンパイル
import System.Random;import Graphics.HGL;import Data.Int;import Data.Word;
drawPoint(x,y)=(polyline [(x,y),(x,y+1)]);drawNoise w h=let sub(n)=(ioToDraw $ randomIO>>=(return . toEnum . (flip mod 256)))>>=(\c -> (withRGB (RGB c c c) (drawPoint (mod n w , div n h)))) in foldl (>>) (ioToDraw(return())) $ map sub [0..(w*h-1)];main = let loop(w)=do{e<-(maybeGetWindowEvent w);(case e of Just (Char c) -> closeWindow(w);_ -> (setGraphic w (drawNoise 100 100)))>>loop(w)} in runGraphics (withWindow_ "noise" (100,100) loop)

点描く関数が見当たらなかったので、polylineで代用してるあたりがもうHGLの使い方として、間違ってる気がするけど、案の定、とてももっさり。あと、Word8の乱数発生させるのに、
(ioToDraw $ randomIO>>=(return . toEnum . (flip mod 256)))
ってふざけてるの?別に変わったこともしてないので、;で区切ってる部分を改行して、適当にインデント付ければ読める。というか、普通に書いて、インデントと型宣言消しただけで、七行きってしまった。

HGLは、あまりにも貧弱なので、なくても特に悲しくないと思った。まあ、そのうち七行テトリスとか目指そう。Haskellなら、七行Lispとか普通にいけそうだ