module test import StdEnv import Data.Maybe from Data.Func import $ import Smurf import SmurfParse Start :: *World -> *World Start w # (io, w) = stdio w //# io = loop (prog reverse) zero io # (mbSt, io) = run (prog reverse) zero io # result = if (isNothing mbSt) "uh-oh." (toString $ fromJust mbSt) # io = io <<< "\n--------------------\n" <<< result <<< "\n" = snd $ fclose io w where loop :: !Program State !*File -> *File loop p st f # (mbProgSt, f) = step p st f | isNothing mbProgSt = f <<< "NOTHING!!!\n" # (prog, st) = fromJust mbProgSt | isEmpty prog = f <<< "\n---------------------------\n" <<< toString st # f = f <<< "---> " <<< toString (hd prog) <<< " ? " # (cmd, f) = freadline f | cmd == "state\n" = loop prog st (f <<< toString st) = loop prog st f prog txt = fromJust $ parse txt // From http://esolangs.org/wiki/Smurf reverse = ['"+"i+""p""gtg""gt"i"p"\\"\\"p\\"i\\"gh\\"o\\"g+\\"o\\"p\\"i\\"gt\\"i\\"p\\"\\\\\\"+\\\\\\"\\\\\\"\\\\\\"p\\"\\"i\\"gq+\\"tg\\"+\\"i\\"gq+\\"\\\\\\"i\\\\\\"p\\"+\\"o\\"gq+\\"\\\\\\"o\\\\\\"p\\"+\\"\\"gq+\\"\\"g+\\"\\"p\\"o\\"gq\\"o\\"+\\"+\\"pgx"""p"\\"+\\"\\"\\"p""i"gq+"tg"+"i"gq+"\\"i\\"p\\"\\""+""gq+""g+""p"""+""i"g+pgx']