brainfuck-0.1.0.3: Brainfuck interpreter
Safe HaskellSafe-Inferred
LanguageHaskell98

Language.Brainfuck

Synopsis

Documentation

data Command Source #

The complete BF language:

  • > Increment the pointer.
  • < Decrement the pointer.
  • + Increment the byte at the pointer.
  • - Decrement the byte at the pointer.
  • . Output the byte at the pointer.
  • , Input a byte and store it in the byte at the pointer.
  • [ Jump forward past the matching ] if the byte at the pointer is zero.
  • ] Jump backward to the matching [ unless the byte at the pointer is zero.

Constructors

IncPtr 
IncPtrBy !Int

Increment pointer by set amount

DecPtr 
IncByte 
IncByteBy !Int

Increment by a set amount

DecByte 
OutputByte 
JmpForward !Int

nesting level

JmpBackward !Int

nesting level

SetIpTo !Int

Sets the instruction ptr to a specific value

Halt 
Ignored 

Instances

Instances details
Show Command Source # 
Instance details

Defined in Language.Brainfuck

Methods

showsPrec :: Int -> Command -> ShowS

show :: Command -> String

showList :: [Command] -> ShowS

Eq Command Source # 
Instance details

Defined in Language.Brainfuck

Methods

(==) :: Command -> Command -> Bool

(/=) :: Command -> Command -> Bool

type Core = IOUArray Int Word8 Source #

type InstPtr = Int Source #

type CorePtr = Int Source #

data BF Source #

Constructors

BF !Core !CorePtr !InstPtr 

Instances

Instances details
Show BF Source # 
Instance details

Defined in Language.Brainfuck

Methods

showsPrec :: Int -> BF -> ShowS

show :: BF -> String

showList :: [BF] -> ShowS

decode :: Char -> State Int Command Source #

debug :: Bool Source #

doCommand :: Array Int Command -> BF -> IO BF Source #

nextJmp :: Array Int Command -> InstPtr -> (InstPtr -> InstPtr) -> Command -> InstPtr Source #

chrToWord8 :: Char -> Word8 Source #

word8ToChr :: Word8 -> Char Source #

updateByte :: MArray IOUArray Word8 m => BF -> (Word8 -> Word8) -> m BF Source #

loadProgram :: String -> Array Int Command Source #

optimize :: [Command] -> Array Int Command Source #

execute :: Array Int Command -> Int -> BF -> IO () Source #

halt :: IO () Source #