    {- |
       Module      : Text.Pandoc.Lua.Marshaling.AnyValue
       Copyright   : © 2017-2020 Albert Krewinkel
       License     : GNU GPL, version 2 or above

       Maintainer  : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
       Stability   : alpha

    Helper type to work with raw Lua stack indices instead of unmarshaled
    values.

    TODO: Most of this module should be abstracted, factored out, and go
    into HsLua.
    -}
    module Text.Pandoc.Lua.Marshaling.AnyValue (AnyValue (..)) where

    import Foreign.Lua (Peekable (peek), StackIndex)

    -- | Dummy type to allow values of arbitrary Lua type. This just wraps
    -- stack indices, using it requires extra care.
    newtype AnyValue = AnyValue StackIndex

    instance Peekable AnyValue where
      peek :: StackIndex -> Lua AnyValue
    peek = AnyValue -> Lua AnyValue
    forall (m :: * -> *) a. Monad m => a -> m a
    return (AnyValue -> Lua AnyValue)
    -> (StackIndex -> AnyValue) -> StackIndex -> Lua AnyValue
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . StackIndex -> AnyValue
    AnyValue