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

    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
      , peekNilOr
      , peekNoneOr
      , peekNoneOrNilOr
        -- ** 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)