12年前に書かれた http://www.geocities.jp/takascience/haskell/monadius_ja.html を手元で動かした。と言っても、ほぼ手を加えずにそのまま動いた。
$ diff -ur monadius.BK/ monadius
diff -ur monadius.BK/src/Main.hs monadius/src/Main.hs
--- monadius.BK/src/Main.hs 2017-05-16 08:02:04.566956400 +0900
+++ monadius/src/Main.hs 2017-05-16 08:08:18.524217900 +0900
@@ -49,7 +49,8 @@
loadReplay::String-> IO ReplayInfo
loadReplay filename = readFile filename >>= (return.read)
-main = withMusic $ do
+main = withMusic $ do
+ getArgsAndInitialize
args <-getArgs
putDebugStrLn $ show args
@@ -109,7 +110,7 @@
mainLoop
destroyWindow curwnd
- `catch` (\exc -> return ())
+ `catch` (\exc -> print (exc :: SomeException))
where
getReplayFilename args = if length candidates == 0 then Nothing else Just (head candidates) where
@@ -119,7 +120,7 @@
removesuffix str = if '.' `elem` str then (removesuffix.init) str else str
exitLoop = do
- throwIO $ ExitException ExitSuccess
+ exitWith ExitSuccess
initMatrix = do
viewport $= (Position 0 0,Size 640 480)
@@ -375,9 +376,9 @@
closeProc = do
putDebugStrLn "closed"
- throwIO $ ExitException ExitSuccess
+ exitWith ExitSuccess
savePoints = [0,1280,3000,6080]
-
\ No newline at end of file
+
diff -ur monadius.BK/src/Monadius.hs monadius/src/Monadius.hs
--- monadius.BK/src/Monadius.hs 2017-05-16 08:02:04.582583000 +0900
+++ monadius/src/Monadius.hs 2017-05-16 08:02:24.097737300 +0900
@@ -5,7 +5,7 @@
shotButton,missileButton,powerUpButton,upButton,downButton,leftButton,rightButton,selfDestructButton
)where
-import Graphics.UI.GLUT hiding (position)
+import Graphics.UI.GLUT hiding (position, DebugMessage)
import Graphics.Rendering.OpenGL.GLU
import Control.Exception
import Control.Monad
freeglut導入済みのmingw64でビルド。Windows上でビルドしたので音も出る。Cのコードも入っているので注意。
$ cd src
$ stack exec makefile.bat
と、これで動いたのだけど、5年前に自分で作ったパッチ を見ると、 (_, args) <- getArgsAndInitialize
とするのが正しいらしい。まあいいや。
ちなみに、 Surface Book 上で動かしているのだけど、微妙に動きに引っかかりを感じる。引っかかる程度でほぼなめらかには動いているのだけど。
2017/5/18追記: hackageにも上がってた