souffle-haskell-3.5.1: Souffle Datalog bindings for Haskell
Safe HaskellSafe-Inferred
LanguageHaskell2010

Language.Souffle.Internal

Description

An internal module, providing a slightly higher level interface than Language.Souffle.Internal.Bindings. It uses more commonly found data types instead of the low level C types for easier integration with other parts of a Haskell application. Also it takes care of garbage collection so other modules do not have to take this into account anymore.

Used only internally, so prone to changes, use at your own risk.

Synopsis

Documentation

data Souffle Source #

A void type, used for tagging a pointer that points to an embedded Souffle program.

data Relation Source #

A void type, used for tagging a pointer that points to a relation.

data ByteBuf Source #

A void type, used for tagging a pointer that points to a raw bytearray.

init :: String -> IO (Maybe (ForeignPtr Souffle)) Source #

Initializes a Souffle program.

The string argument is the name of the program and should be the same as the filename (minus the .dl extension).

The action will return Nothing if it failed to load the Souffle program. Otherwise it will return a pointer that can be used in other functions in this module.

setNumThreads :: ForeignPtr Souffle -> Word64 -> IO () Source #

Sets the number of CPU cores this Souffle program should use.

getNumThreads :: ForeignPtr Souffle -> IO Word64 Source #

Gets the number of CPU cores this Souffle program should use.

run :: ForeignPtr Souffle -> IO () Source #

Runs the Souffle program.

loadAll :: ForeignPtr Souffle -> FilePath -> IO () Source #

Load all facts from files in a certain directory.

printAll :: ForeignPtr Souffle -> FilePath -> IO () Source #

Write out all facts of the program to CSV files in a certain directory (as defined in the Souffle program).

getRelation :: ForeignPtr Souffle -> String -> IO (Ptr Relation) Source #

Lookup a relation by name in the Souffle program.

Note that the returned pointer can be nullPtr if it is not defined in the Souffle program.

pushFacts :: Ptr Relation -> Ptr ByteBuf -> Word64 -> IO () Source #

Serializes many facts from Datalog to Haskell.

You need to check if the passed pointers are non-NULL before passing it to this function. Not doing so results in undefined behavior. Passing in a different count of objects to what is actually inside the byte buffer will crash.

popFacts :: Ptr Souffle -> Ptr Relation -> IO (Ptr ByteBuf) Source #

Serializes many facts from Haskell to Datalog.

You need to check if the passed pointer is non-NULL before passing it to this function. Not doing so results in undefined behavior.

Returns a pointer to a byte buffer that contains the serialized Datalog facts.

containsFact :: Ptr Relation -> Ptr ByteBuf -> IO Bool Source #

Checks if a relation contains a certain tuple.

Returns True if the tuple was found in the relation; otherwise False.