hslua-2.3.1: Bindings to Lua, an embeddable scripting language
Copyright© 2007–2012 Gracjan Polak;
© 2012–2016 Ömer Sinan Ağacan;
© 2017-2024 Albert Krewinkel
LicenseMIT
MaintainerAlbert Krewinkel <tarleb@hslua.org>
Stabilitybeta
Portabilitynon-portable (depends on GHC)
Safe HaskellNone
LanguageHaskell2010

HsLua

Description

Functions and utilities enabling the seamless integration of a Lua interpreter into a Haskell project.

This module combines and re-exports the functionality of the HsLua framework. Basic access to the Lua API is provided by Core from Hackage package lua.

Synopsis

Core functionality

type Lua a = LuaE Exception a #

newtype LuaE e a #

Constructors

Lua 

Instances

Instances details
LuaError e => Exposable e (HaskellFunction e) 
Instance details

Defined in HsLua.Class.Exposable

MonadReader LuaEnvironment (LuaE e) 
Instance details

Defined in HsLua.Core.Types

(LuaError e, Pushable a) => Exposable e (LuaE e a) 
Instance details

Defined in HsLua.Class.Exposable

MonadIO (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

liftIO :: IO a -> LuaE e a Source #

MonadCatch (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

catch :: (HasCallStack, Exception e0) => LuaE e a -> (e0 -> LuaE e a) -> LuaE e a Source #

MonadMask (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

mask :: HasCallStack => ((forall a. LuaE e a -> LuaE e a) -> LuaE e b) -> LuaE e b Source #

uninterruptibleMask :: HasCallStack => ((forall a. LuaE e a -> LuaE e a) -> LuaE e b) -> LuaE e b Source #

generalBracket :: HasCallStack => LuaE e a -> (a -> ExitCase b -> LuaE e c) -> (a -> LuaE e b) -> LuaE e (b, c) Source #

MonadThrow (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

throwM :: (HasCallStack, Exception e0) => e0 -> LuaE e a Source #

LuaError e => Alternative (LuaE e) 
Instance details

Defined in HsLua.Core.Error

Methods

empty :: LuaE e a Source #

(<|>) :: LuaE e a -> LuaE e a -> LuaE e a Source #

some :: LuaE e a -> LuaE e [a] Source #

many :: LuaE e a -> LuaE e [a] Source #

Applicative (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

pure :: a -> LuaE e a Source #

(<*>) :: LuaE e (a -> b) -> LuaE e a -> LuaE e b Source #

liftA2 :: (a -> b -> c) -> LuaE e a -> LuaE e b -> LuaE e c Source #

(*>) :: LuaE e a -> LuaE e b -> LuaE e b Source #

(<*) :: LuaE e a -> LuaE e b -> LuaE e a Source #

Functor (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

fmap :: (a -> b) -> LuaE e a -> LuaE e b Source #

(<$) :: a -> LuaE e b -> LuaE e a Source #

Monad (LuaE e) 
Instance details

Defined in HsLua.Core.Types

Methods

(>>=) :: LuaE e a -> (a -> LuaE e b) -> LuaE e b Source #

(>>) :: LuaE e a -> LuaE e b -> LuaE e b Source #

return :: a -> LuaE e a Source #

LuaError e => MonadFail (LuaE e) 
Instance details

Defined in HsLua.Core.Error

Methods

fail :: String -> LuaE e a Source #

(LuaError e, Peekable a) => Invokable (LuaE e a) 
Instance details

Defined in HsLua.Class.Invokable

Methods

addArg :: Name -> (forall e0. LuaError e0 => LuaE e0 ()) -> NumArgs -> LuaE e a Source #

newtype Integer #

Constructors

Integer Int64 

Instances

Instances details
Bounded Integer 
Instance details

Defined in Lua.Types

Enum Integer 
Instance details

Defined in Lua.Types

Num Integer 
Instance details

Defined in Lua.Types

Read Integer 
Instance details

Defined in Lua.Types

Integral Integer 
Instance details

Defined in Lua.Types

Real Integer 
Instance details

Defined in Lua.Types

Show Integer 
Instance details

Defined in Lua.Types

Eq Integer 
Instance details

Defined in Lua.Types

Ord Integer 
Instance details

Defined in Lua.Types

Peekable Integer 
Instance details

Defined in HsLua.Class.Peekable

Pushable Integer 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Integer -> LuaE e () Source #

data Type #

Instances

Instances details
Bounded Type 
Instance details

Defined in HsLua.Core.Types

Enum Type 
Instance details

Defined in HsLua.Core.Types

Read Type 
Instance details

Defined in HsLua.Core.Types

Show Type 
Instance details

Defined in HsLua.Core.Types

Eq Type 
Instance details

Defined in HsLua.Core.Types

Methods

(==) :: Type -> Type -> Bool Source #

(/=) :: Type -> Type -> Bool Source #

Ord Type 
Instance details

Defined in HsLua.Core.Types

concat :: LuaError e => NumArgs -> LuaE e () #

rotate :: StackIndex -> Int -> LuaE e () #

newtype Number #

Constructors

Number Double 

Instances

Instances details
Floating Number 
Instance details

Defined in Lua.Types

RealFloat Number 
Instance details

Defined in Lua.Types

Num Number 
Instance details

Defined in Lua.Types

Read Number 
Instance details

Defined in Lua.Types

Fractional Number 
Instance details

Defined in Lua.Types

Real Number 
Instance details

Defined in Lua.Types

RealFrac Number 
Instance details

Defined in Lua.Types

Show Number 
Instance details

Defined in Lua.Types

Eq Number 
Instance details

Defined in Lua.Types

Ord Number 
Instance details

Defined in Lua.Types

Peekable Number 
Instance details

Defined in HsLua.Class.Peekable

Pushable Number 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Number -> LuaE e () Source #

insert :: StackIndex -> LuaE e () #

liftIO :: MonadIO m => IO a -> m a Source #

Lift a computation from the IO monad. This allows us to run IO computations in any monadic stack, so long as it supports these kinds of operations (i.e. IO is the base monad for the stack).

Example

Expand
import Control.Monad.Trans.State -- from the "transformers" library

printState :: Show s => StateT s IO ()
printState = do
  state <- get
  liftIO $ print state

Had we omitted liftIO, we would have ended up with this error:

• Couldn't match type ‘IO’ with ‘StateT s IO’
 Expected type: StateT s IO ()
   Actual type: IO ()

The important part here is the mismatch between StateT s IO () and IO ().

Luckily, we know of a function that takes an IO a and returns an (m a): liftIO, enabling us to run the program and see the expected results:

> evalStateT printState "hello"
"hello"

> evalStateT printState 3
3

close :: State -> IO () #

try :: Exception e => LuaE e a -> LuaE e (Either e a) #

newtype State #

Constructors

State (Ptr ()) 

Instances

Instances details
Generic State 
Instance details

Defined in Lua.Types

Associated Types

type Rep State 
Instance details

Defined in Lua.Types

type Rep State = D1 ('MetaData "State" "Lua.Types" "lua-2.3.4-9jycuNWuw7q13eGe6UuFpA" 'True) (C1 ('MetaCons "State" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Ptr ()))))

Methods

from :: State -> Rep State x Source #

to :: Rep State x -> State Source #

Eq State 
Instance details

Defined in Lua.Types

Methods

(==) :: State -> State -> Bool Source #

(/=) :: State -> State -> Bool Source #

Peekable CFunction 
Instance details

Defined in HsLua.Class.Peekable

Peekable State 
Instance details

Defined in HsLua.Class.Peekable

Pushable CFunction 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => CFunction -> LuaE e () Source #

type Rep State 
Instance details

Defined in Lua.Types

type Rep State = D1 ('MetaData "State" "Lua.Types" "lua-2.3.4-9jycuNWuw7q13eGe6UuFpA" 'True) (C1 ('MetaCons "State" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Ptr ()))))

data Status #

Instances

Instances details
Show Status 
Instance details

Defined in HsLua.Core.Types

Eq Status 
Instance details

Defined in HsLua.Core.Types

load :: Reader -> Ptr () -> Name -> LuaE e Status #

newtype NumResults #

Constructors

NumResults 

Fields

Instances

Instances details
Num NumResults 
Instance details

Defined in Lua.Types

Show NumResults 
Instance details

Defined in Lua.Types

Eq NumResults 
Instance details

Defined in Lua.Types

Ord NumResults 
Instance details

Defined in Lua.Types

Peekable CFunction 
Instance details

Defined in HsLua.Class.Peekable

Pushable CFunction 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => CFunction -> LuaE e () Source #

LuaError e => Exposable e (HaskellFunction e) 
Instance details

Defined in HsLua.Class.Exposable

newtype NumArgs #

Constructors

NumArgs 

Fields

Instances

Instances details
Num NumArgs 
Instance details

Defined in Lua.Types

Show NumArgs 
Instance details

Defined in Lua.Types

Eq NumArgs 
Instance details

Defined in Lua.Types

Ord NumArgs 
Instance details

Defined in Lua.Types

newtype StackIndex #

Constructors

StackIndex 

Fields

Instances

Instances details
Enum StackIndex 
Instance details

Defined in Lua.Types

Num StackIndex 
Instance details

Defined in Lua.Types

Show StackIndex 
Instance details

Defined in Lua.Types

Eq StackIndex 
Instance details

Defined in Lua.Types

Ord StackIndex 
Instance details

Defined in Lua.Types

data Reference #

Constructors

Reference CInt 
RefNil 

Instances

Instances details
Show Reference 
Instance details

Defined in Lua.Auxiliary

Eq Reference 
Instance details

Defined in Lua.Auxiliary

newtype Name #

Constructors

Name 

Fields

Instances

Instances details
Semigroup Name 
Instance details

Defined in HsLua.Core.Types

IsString Name 
Instance details

Defined in HsLua.Core.Types

Show Name 
Instance details

Defined in HsLua.Core.Types

Eq Name 
Instance details

Defined in HsLua.Core.Types

Methods

(==) :: Name -> Name -> Bool Source #

(/=) :: Name -> Name -> Bool Source #

Ord Name 
Instance details

Defined in HsLua.Core.Types

newtype LuaEnvironment #

Constructors

LuaEnvironment 

Fields

Instances

Instances details
MonadReader LuaEnvironment (LuaE e) 
Instance details

Defined in HsLua.Core.Types

runWith :: State -> LuaE e a -> IO a #

unsafeRunWith :: State -> LuaE e a -> IO a #

newhsuserdatauv :: a -> Int -> LuaE e () #

fromuserdata :: forall a e. StackIndex -> Name -> LuaE e (Maybe a) #

class Exception e => LuaError e where #

Methods

popException :: LuaE e e #

pushException :: e -> LuaE e () #

luaException :: String -> e #

Instances

Instances details
LuaError Exception 
Instance details

Defined in HsLua.Core.Error

failLua :: LuaError e => String -> LuaE e a #

changeErrorType :: forall old new a. LuaE old a -> LuaE new a #

call :: LuaError e => NumArgs -> NumResults -> LuaE e () #

createtable :: Int -> Int -> LuaE e () #

newtable :: LuaE e () #

newuserdatauv :: Int -> Int -> LuaE e (Ptr ()) #

openlibs :: LuaE e () #

openbase :: LuaError e => LuaE e () #

opendebug :: LuaError e => LuaE e () #

openio :: LuaError e => LuaE e () #

openmath :: LuaError e => LuaE e () #

openos :: LuaError e => LuaE e () #

openpackage :: LuaError e => LuaE e () #

openstring :: LuaError e => LuaE e () #

opentable :: LuaError e => LuaE e () #

pop :: Int -> LuaE e () #

pushboolean :: Bool -> LuaE e () #

pushnil :: LuaE e () #

pushnumber :: Number -> LuaE e () #

rawset :: LuaError e => StackIndex -> LuaE e () #

register :: LuaError e => Name -> CFunction -> LuaE e () #

remove :: StackIndex -> LuaE e () #

setfield :: LuaError e => StackIndex -> Name -> LuaE e () #

setglobal :: LuaError e => Name -> LuaE e () #

settop :: StackIndex -> LuaE e () #

setwarnf :: WarnFunction -> Ptr () -> LuaE e () #

checkstack' :: LuaError e => Int -> String -> LuaE e () #

requiref :: LuaError e => Name -> CFunction -> Bool -> LuaE e () #

where' :: Int -> LuaE e () #

run :: LuaE e a -> IO a #

runEither :: Exception e => LuaE e a -> IO (Either e a) #

requirehs :: LuaError e => Name -> (Name -> LuaE e ()) -> LuaE e () #

preloadhs :: LuaError e => Name -> LuaE e NumResults -> LuaE e () #

setwarnf' :: LuaError e => (ByteString -> LuaE e ()) -> LuaE e () #

Marshalling

Module, data, and function packaging

Type classes

class Pushable a where Source #

A value that can be pushed to the Lua stack.

Methods

push :: LuaError e => a -> LuaE e () Source #

Pushes a value onto Lua stack, casting it into meaningfully nearest Lua type.

Instances

Instances details
Pushable ByteString 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => ByteString -> LuaE e () Source #

Pushable ByteString 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => ByteString -> LuaE e () Source #

Pushable CFunction 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => CFunction -> LuaE e () Source #

Pushable Integer 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Integer -> LuaE e () Source #

Pushable Number 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Number -> LuaE e () Source #

Pushable Text 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Text -> LuaE e () Source #

Pushable Integer 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Integer -> LuaE e () Source #

Pushable () 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => () -> LuaE e () Source #

Pushable Bool 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Bool -> LuaE e () Source #

Pushable Double 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Double -> LuaE e () Source #

Pushable Float 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Float -> LuaE e () Source #

Pushable Int 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Int -> LuaE e () Source #

Pushable a => Pushable (Set a) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Set a -> LuaE e () Source #

Pushable (Ptr a) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Ptr a -> LuaE e () Source #

Pushable a => Pushable (Optional a) 
Instance details

Defined in HsLua.Class.Util

Methods

push :: LuaError e => Optional a -> LuaE e () Source #

Pushable [Char] 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => [Char] -> LuaE e () Source #

Pushable a => Pushable [a] 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => [a] -> LuaE e () Source #

(Pushable a, Pushable b) => Pushable (Map a b) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => Map a b -> LuaE e () Source #

(Pushable a, Pushable b) => Pushable (a, b) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => (a, b) -> LuaE e () Source #

(Pushable a, Pushable b, Pushable c) => Pushable (a, b, c) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => (a, b, c) -> LuaE e () Source #

(Pushable a, Pushable b, Pushable c, Pushable d) => Pushable (a, b, c, d) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e => (a, b, c, d) -> LuaE e () Source #

(Pushable a, Pushable b, Pushable c, Pushable d, Pushable e) => Pushable (a, b, c, d, e) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e0 => (a, b, c, d, e) -> LuaE e0 () Source #

(Pushable a, Pushable b, Pushable c, Pushable d, Pushable e, Pushable f) => Pushable (a, b, c, d, e, f) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e0 => (a, b, c, d, e, f) -> LuaE e0 () Source #

(Pushable a, Pushable b, Pushable c, Pushable d, Pushable e, Pushable f, Pushable g) => Pushable (a, b, c, d, e, f, g) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e0 => (a, b, c, d, e, f, g) -> LuaE e0 () Source #

(Pushable a, Pushable b, Pushable c, Pushable d, Pushable e, Pushable f, Pushable g, Pushable h) => Pushable (a, b, c, d, e, f, g, h) 
Instance details

Defined in HsLua.Class.Pushable

Methods

push :: LuaError e0 => (a, b, c, d, e, f, g, h) -> LuaE e0 () Source #

Marshal to and from JSON-like structures

Utility functions

getglobal' :: LuaError e => Name -> LuaE e () Source #

Like getglobal, but knows about packages and nested tables. E.g.

getglobal' "math.sin"

will return the function sin in package math.

setglobal' :: LuaError e => Name -> LuaE e () Source #

Like setglobal, but knows about packages and nested tables. E.g.

pushstring "0.9.4"
setglobal' "mypackage.version"

All tables and fields, except for the last field, must exist.