hruby-0.2.7: Embed Ruby in your Haskell program.

Safe HaskellNone

Foreign.Ruby.Safe

Contents

Description

This modules materializes the ruby interpreters as the RubyInterpreter data type. All the calls using these APIs are garanteed to run in the OS thread that the interpreter expects.

Synopsis

Initialization and finalization

startRubyInterpreter :: IO RubyInterpreterSource

Initializes a Ruby interpreter. This should only be called once. It actually runs an internal server in a dedicated OS thread.

closeRubyInterpreter :: RubyInterpreter -> IO ()Source

This will shut the internal server down.

Data types

type RValue = Ptr CULongSource

This is the type of Ruby values. It is defined as a pointer to some unsigned long, just like Ruby does. The actual value is either pointed to, or encoded in the pointer.

data RubyInterpreter Source

This is acutally a newtype around a TQueue.

Safe variants of other funtions

embedHaskellValue :: RubyInterpreter -> a -> IO (Either RubyError RValue)Source

A safe version of the corresponding Foreign.Ruby function.

safeMethodCall :: RubyInterpreter -> String -> String -> [RValue] -> IO (Either RubyError RValue)Source

A safe version of the corresponding Foreign.Ruby function.

makeSafe :: RubyInterpreter -> IO a -> IO (Either RubyError a)Source

Runs an arbitrary computation in the Ruby interpreter thread. This is useful if you want to embed calls from lower level functions. You still need to be careful about the GC's behavior.

Wrapping Haskell function and registering them

type RubyFunction1 = RValue -> IO RValueSource

All those function types can be used to register functions to the Ruby runtime. Please note that the first argument is always set (it is "self"). For this reason, there is no RubyFunction0 type.