Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
- newtype BrainFuck a = BrainFuck (DataPointer -> ([Char], DataPointer, a))
- type DataPointer = Integer
- func :: BrainFuck f -> DataPointer -> ([Char], DataPointer, f)
- brainfuck :: BrainFuck f -> String
- next :: BrainFuck ()
- close :: BrainFuck ()
- open :: BrainFuck ()
- input :: BrainFuck ()
- output :: BrainFuck ()
- decr :: BrainFuck ()
- incr :: BrainFuck ()
- prev :: BrainFuck ()
- add :: Int -> BrainFuck ()
- sub :: Int -> BrainFuck ()
- opcode :: Char -> BrainFuck ()
- opcode' :: (DataPointer -> DataPointer) -> Char -> BrainFuck ()
- multi :: BrainFuck () -> Int -> BrainFuck ()
- char :: Char -> BrainFuck ()
- unchar :: Char -> BrainFuck ()
- withChar :: Char -> BrainFuck a -> BrainFuck a
- addr :: BrainFuck DataPointer
- setAddr :: Integer -> BrainFuck ()
- loopUnless0 :: BrainFuck () -> BrainFuck ()
- data Constants = Constants NumConstants Integer
- type NumConstants = Int
- brainfuckConstants :: NumConstants -> (Constants -> BrainFuck a) -> String
- pointAt :: Constants -> Integer -> BrainFuck ()
- loop :: Constants -> BrainFuck () -> BrainFuck ()
- forever :: Constants -> BrainFuck () -> BrainFuck ()
- demo :: String
- cat :: String
- helloworld :: String
Documentation
type DataPointer = Integer Source
func :: BrainFuck f -> DataPointer -> ([Char], DataPointer, f) Source
Retrieve the inner function
opcode :: Char -> BrainFuck () Source
Adds an arbitrary character to the program. Should not be used directly.
opcode' :: (DataPointer -> DataPointer) -> Char -> BrainFuck () Source
Adds an arbitrary character to the program, and updates the data pointer. Should not be used directly.
char :: Char -> BrainFuck () Source
Assuming that the data pointer points to a 0, changes it to the value of a Char.
withChar :: Char -> BrainFuck a -> BrainFuck a Source
Runs an action with the data pointer pointing at a Char.
addr :: BrainFuck DataPointer Source
Gets the current address of the data pointer.
loopUnless0 :: BrainFuck () -> BrainFuck () Source
The loop is only run if the data pointer doesn't point to 0.
On entry, the loop body is run, and then it loops, until the data pointer points to 0.
type NumConstants = Int Source
brainfuckConstants :: NumConstants -> (Constants -> BrainFuck a) -> String Source
Let's run programs with data addresses 0..n reserved to always contain the numbers n..0
These constants will make brainfuck quite a bit easier to use!
pointAt :: Constants -> Integer -> BrainFuck () Source
Sets data pointer to point to one of the Constants.
loop :: Constants -> BrainFuck () -> BrainFuck () Source
Run an action in a loop, until the data pointer points to 0.
Prints out the ASCII characters, starting with space, repeatedly.
TODO: Only print printable characters.