{-|
Module      : HsLua.Marshalling
Copyright   : © 2007–2012 Gracjan Polak;
              © 2012–2016 Ömer Sinan Ağacan;
              © 2017-2022 Albert Krewinkel
License     : MIT
Maintainer  : Albert Krewinkel <tarleb+hslua@zeitkraut.de>

Functions to push and retrieve data to and from Lua.
-}
module HsLua.Marshalling
  ( -- * Receiving values from Lua stack (Lua → Haskell)
    Peeker
  , runPeeker
  , Result (..)
  , force
  , retrieving
  , failure
  , resultToEither
    -- ** Primitive types
  , peekNil
  , peekNoneOrNil
  , peekBool
  , peekIntegral
  , peekRealFloat
    -- ** Strings
  , peekByteString
  , peekLazyByteString
  , peekString
  , peekText
  , peekStringy
  , peekName
    -- ** Readable types
  , peekRead
    -- ** Collections
  , peekKeyValuePairs
  , peekList
  , peekMap
  , peekSet
    -- ** Combinators
  , choice
  , peekFieldRaw
  , peekPair
  , peekTriple
    -- ** Lua peek monad
  , Peek (..)
  , forcePeek
  , liftLua
  , withContext
  , failPeek
  , lastly
  , cleanup
    -- ** Building Peek functions
  , typeChecked
  , typeMismatchMessage
  , reportValueOnFailure

    -- * Pushing values to Lua stack (Haskell → Lua)
  , module HsLua.Marshalling.Push

    -- * Utilities
  , pushIterator
  ) where

import Prelude hiding (compare, concat)

import HsLua.Marshalling.Peek
import HsLua.Marshalling.Peekers
import HsLua.Marshalling.Push
import HsLua.Marshalling.Userdata (pushIterator)