Skip to content

Instantly share code, notes, and snippets.

@miaout17
Created July 23, 2009 14:50
Show Gist options
  • Save miaout17/153028 to your computer and use it in GitHub Desktop.
Save miaout17/153028 to your computer and use it in GitHub Desktop.
data BFState = BFState {
dataLeft :: [Word8],
dataRight :: [Word8],
codeLeft :: [Char],
codeRight :: [Char],
bfOutput :: [Char]
}
fwdCode, backCode :: State BFState ()
fwdCode = modify $ \s@(BFState{codeLeft=ls, codeRight=r:rs}) -> s{codeLeft=r:ls, codeRight=rs}
backCode = modify $ \s@(BFState{codeLeft=l:ls, codeRight=rs}) -> s{codeLeft=ls, codeRight=l:rs}
fwdData, backData :: State BFState ()
fwdData = modify $ \s@(BFState{dataLeft=ls, dataRight=r:rs}) -> s{dataLeft=r:ls, dataRight=rs}
backData = modify $ \s@(BFState{dataLeft=l:ls, dataRight=rs}) -> s{dataLeft=ls, dataRight=l:rs}
runBF :: State BFState ()
runBF = do
r <- running
if not r then return () else do
stepBF
runBF
stepBF :: State BFState ()
stepBF = do
c <- currCode
d <- getData
fwdCode
case c of
'+' -> incData
'-' -> decData
'>' -> fwdData
'<' -> backData
_ -> return ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment