lua-2.1.0: Lua, an embeddable scripting language

Copyright | © 2007–2012 Gracjan Polak; © 2012–2016 Ömer Sinan Ağacan; © 2017-2022 Albert Krewinkel
License | MIT
Maintainer | Albert Krewinkel <tarleb+hslua@zeitkraut.de>
Stability | beta
Portability | non-portable (depends on GHC)
Safe Haskell | None
Language | Haskell2010

Lua.Call

Description

Function to push Haskell functions as Lua C functions.

Haskell functions are converted into C functions in a two-step process. First, a function pointer to the Haskell function is stored in a Lua userdata object. The userdata gets a metatable which allows to invoke the object as a function. The userdata also ensures that the function pointer is freed when the object is garbage collected in Lua.

In a second step, the userdata is then wrapped into a C closure. The wrapping function calls the userdata object and implements the error protocol, converting special error values into proper Lua errors.

Synopsis

- hslua_pushhsfunction :: State -> PreCFunction -> IO ()

# Documentation

hslua_pushhsfunction :: State -> PreCFunction -> IO () #

Pushes a Haskell operation as a Lua function. The Haskell operation is expected to follow the custom error protocol, i.e., it must signal errors with ``hslua_error``.

### Example

Export the function to calculate triangular numbers.

    let triangular :: PreCFunction
        triangular l' = do
          n <- lua_tointegerx l' (nthBottom 1) nullPtr
          lua_pushinteger l' (sum [1..n])
          return (NumResults 1)

    hslua_newhsfunction l triangular
    withCString "triangular" (lua_setglobal l)