content: {-|
  Module      : HsLua.Core
  Copyright   : © 2007–2012 Gracjan Polak;
                © 2012–2016 Ömer Sinan Ağacan;
                © 2017-2024 Albert Krewinkel
  License     : MIT
  Maintainer  : Albert Krewinkel <tarleb@hslua.org>
  Stability   : beta
  Portability : non-portable (depends on GHC)
  
  Core Lua API. This module provides thin wrappers around the respective
  functions of the Lua C API. C functions which can throw an error are
  wrapped such that the error is converted into an @'Exception'@. However,
  memory allocation errors are not caught and will cause the host program
  to terminate.
  -}
  module HsLua.Core
    ( -- * Run Lua computations
      run
    , runWith
    , runEither
    , GCManagedState
    , newGCManagedState
    , closeGCManagedState
    , withGCManagedState
    -- * Lua Computations
    , LuaE (..)
    , Lua
    , unsafeRunWith
    , liftIO
    , state
    , LuaEnvironment (..)
    -- * Lua API types
    , CFunction
    , PreCFunction
    , Lua.Integer (..)
    , Lua.Number (..)
    -- ** Stack index
    , StackIndex (..)
    , nthTop
    , nthBottom
    , nth
    , top
    -- ** Number of arguments and return values
    , NumArgs (..)
    , NumResults (..)
    -- ** Table fields
    , Name (..)
    -- * Lua API
    -- ** Constants and pseudo-indices
    , multret
    , registryindex
    , upvalueindex
    -- ** State manipulation
    , Lua.State (..)
    , newstate
    , close
    -- ** Basic stack manipulation
    , absindex
    , gettop
    , settop
    , pushvalue
    , copy
    , insert
    , rotate
    , pop
    , remove
    , replace
    , checkstack
    -- ** types and type checks
    , Type (..)
    , ltype
    , typename
    , isboolean
    , iscfunction
    , isfunction
    , isinteger
    , islightuserdata
    , isnil
    , isnone
    , isnoneornil
    , isnumber
    , isstring
    , istable
    , isthread
    , isuserdata
    -- ** access functions (stack → Haskell)
    , toboolean
    , tocfunction
    , tointeger
    , tonumber
    , topointer
    , tostring
    , tothread
    , touserdata
    , rawlen
    -- ** Comparison and arithmetic functions
    , RelationalOperator (..)
    , compare
    , equal
    , lessthan
    , rawequal
    -- ** push functions (Haskell → stack)
    , pushboolean
    , pushcfunction
    , pushcclosure
    , pushinteger
    , pushlightuserdata
    , pushnil
    , pushnumber
    , pushstring
    , pushthread
    -- ** get functions (Lua → stack)
    , getglobal
    , gettable
    , getfield
    , rawget
    , rawgeti
    , createtable
    , newtable
    , newuserdatauv
    , getmetatable
    , getiuservalue
    -- ** set functions (stack → Lua)
    , setglobal
    , settable
    , setfield
    , rawset
    , rawseti
    , setmetatable
    , setiuservalue
    -- ** load and call functions (load and run Lua code)
    , call
    , pcall
    , load
    , loadbuffer
    , loadfile
    , loadstring
    -- ** Coroutine functions
    , Status (..)
    , status
    -- ** garbage-collection function and options
    , GCControl (..)
    , gc
    -- ** miscellaneous and helper functions
    , next
    , error
    , concat
    , pushglobaltable
    , register
    , setwarnf
    -- * loading libraries
    , openbase
    , opendebug
    , openio
    , openlibs
    , openmath
    , openpackage
    , openos
    , openstring
    , opentable
    -- * Auxiliary library
    , checkstack'
    , dostring
    , dofile
    , getmetafield
    , getmetatable'
    , getsubtable
    , newmetatable
    , requiref
    , tostring'
    , traceback
    , where'
    -- ** References
    , Reference (..)
    , ref
    , getref
    , unref
    , fromReference
    , toReference
    , noref
    , refnil
    -- ** Registry fields
    , loaded
    , preload
    -- ** Running with tracebacks
    , pcallTrace
    , callTrace
    , dofileTrace
    , dostringTrace
    -- ** Warnings
    , setwarnf'
  
    -- * Debug interface
    , getupvalue
    , setupvalue
  
    -- * Haskell userdata values
    --
    -- | Push arbitrary Haskell values to the Lua stack.
    , newhsuserdatauv
    , newudmetatable
    , fromuserdata
    , putuserdata
    -- ** Haskell functions and closures
    , HaskellFunction
    , pushHaskellFunction
    , pushPreCFunction
    -- * Error handling
    , LuaError (..)
    , Exception (..)
    , try
    , failLua
    , throwErrorAsException
    , throwTypeMismatchError
    , changeErrorType
      -- ** Helpers
    , popErrorMessage
    , pushTypeMismatchError
      -- * Package
    , requirehs
    , preloadhs
    ) where
  
  import Prelude hiding (EQ, LT, compare, concat, error)
  
  import HsLua.Core.Auxiliary
  import HsLua.Core.Closures
  import HsLua.Core.Debug
  import HsLua.Core.Error
  import HsLua.Core.Package
  import HsLua.Core.Primary
  import HsLua.Core.Run
  import HsLua.Core.Trace
  import HsLua.Core.Types as Lua
  import HsLua.Core.Userdata
  import HsLua.Core.Warn
  