-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Type classes for HsLua -- -- Type classes for convenient marshalling and calling of Lua functions. @package hslua-classes @version 2.0.0 -- | Sending haskell objects to the lua stack. module HsLua.Class.Peekable -- | A value that can be read from the Lua stack. class Peekable a -- | Check if at index n there is a convertible Lua value and if -- so return it. Throws a Exception otherwise. peek :: (Peekable a, PeekError e) => StackIndex -> LuaE e a -- | Exceptions that are to be used with peek and similar functions -- must be instances of this class. It ensures that error can be amended -- with the context in which they happened. class LuaError e => PeekError e messageFromException :: PeekError e => e -> String -- | Read a table into a list of pairs. peekKeyValuePairs :: (Peekable a, Peekable b, PeekError e) => StackIndex -> LuaE e [(a, b)] -- | Read a table into a list peekList :: (PeekError e, Peekable a) => StackIndex -> LuaE e [a] -- | Report the expected and actual type of the value under the given index -- if conversion failed. reportValueOnFailure :: forall e a. PeekError e => ByteString -> (StackIndex -> LuaE e (Maybe a)) -> StackIndex -> LuaE e a -- | Specify a name for the context in which a computation is run. The name -- is added to the error message in case of an exception. inContext :: forall e a. PeekError e => String -> LuaE e a -> LuaE e a instance HsLua.Class.Peekable.Peekable () instance HsLua.Class.Peekable.Peekable Lua.Types.Integer instance HsLua.Class.Peekable.Peekable Lua.Types.Number instance HsLua.Class.Peekable.Peekable Data.ByteString.Internal.ByteString instance HsLua.Class.Peekable.Peekable GHC.Types.Bool instance HsLua.Class.Peekable.Peekable Lua.Types.CFunction instance HsLua.Class.Peekable.Peekable (GHC.Ptr.Ptr a) instance HsLua.Class.Peekable.Peekable Lua.Types.State instance HsLua.Class.Peekable.Peekable Data.Text.Internal.Text instance HsLua.Class.Peekable.Peekable Data.ByteString.Lazy.Internal.ByteString instance HsLua.Class.Peekable.Peekable GHC.Integer.Type.Integer instance HsLua.Class.Peekable.Peekable GHC.Types.Int instance HsLua.Class.Peekable.Peekable GHC.Types.Float instance HsLua.Class.Peekable.Peekable GHC.Types.Double instance HsLua.Class.Peekable.Peekable [GHC.Types.Char] instance HsLua.Class.Peekable.Peekable a => HsLua.Class.Peekable.Peekable [a] instance (GHC.Classes.Ord a, HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b) => HsLua.Class.Peekable.Peekable (Data.Map.Internal.Map a b) instance (GHC.Classes.Ord a, HsLua.Class.Peekable.Peekable a) => HsLua.Class.Peekable.Peekable (Data.Set.Internal.Set a) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b) => HsLua.Class.Peekable.Peekable (a, b) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b, HsLua.Class.Peekable.Peekable c) => HsLua.Class.Peekable.Peekable (a, b, c) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b, HsLua.Class.Peekable.Peekable c, HsLua.Class.Peekable.Peekable d) => HsLua.Class.Peekable.Peekable (a, b, c, d) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b, HsLua.Class.Peekable.Peekable c, HsLua.Class.Peekable.Peekable d, HsLua.Class.Peekable.Peekable e) => HsLua.Class.Peekable.Peekable (a, b, c, d, e) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b, HsLua.Class.Peekable.Peekable c, HsLua.Class.Peekable.Peekable d, HsLua.Class.Peekable.Peekable e, HsLua.Class.Peekable.Peekable f) => HsLua.Class.Peekable.Peekable (a, b, c, d, e, f) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b, HsLua.Class.Peekable.Peekable c, HsLua.Class.Peekable.Peekable d, HsLua.Class.Peekable.Peekable e, HsLua.Class.Peekable.Peekable f, HsLua.Class.Peekable.Peekable g) => HsLua.Class.Peekable.Peekable (a, b, c, d, e, f, g) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Peekable.Peekable b, HsLua.Class.Peekable.Peekable c, HsLua.Class.Peekable.Peekable d, HsLua.Class.Peekable.Peekable e, HsLua.Class.Peekable.Peekable f, HsLua.Class.Peekable.Peekable g, HsLua.Class.Peekable.Peekable h) => HsLua.Class.Peekable.Peekable (a, b, c, d, e, f, g, h) instance HsLua.Class.Peekable.PeekError HsLua.Core.Error.Exception -- | Sending haskell objects to the lua stack. module HsLua.Class.Pushable -- | A value that can be pushed to the Lua stack. class Pushable a -- | Pushes a value onto Lua stack, casting it into meaningfully nearest -- Lua type. push :: (Pushable a, LuaError e) => a -> LuaE e () -- | Push list as numerically indexed table. pushList :: (LuaError e, Pushable a) => [a] -> LuaE e () instance HsLua.Class.Pushable.Pushable () instance HsLua.Class.Pushable.Pushable Lua.Types.Integer instance HsLua.Class.Pushable.Pushable Lua.Types.Number instance HsLua.Class.Pushable.Pushable Data.ByteString.Internal.ByteString instance HsLua.Class.Pushable.Pushable GHC.Types.Bool instance HsLua.Class.Pushable.Pushable Lua.Types.CFunction instance HsLua.Class.Pushable.Pushable (GHC.Ptr.Ptr a) instance HsLua.Class.Pushable.Pushable Data.Text.Internal.Text instance HsLua.Class.Pushable.Pushable Data.ByteString.Lazy.Internal.ByteString instance HsLua.Class.Pushable.Pushable GHC.Integer.Type.Integer instance HsLua.Class.Pushable.Pushable GHC.Types.Int instance HsLua.Class.Pushable.Pushable GHC.Types.Float instance HsLua.Class.Pushable.Pushable GHC.Types.Double instance HsLua.Class.Pushable.Pushable [GHC.Types.Char] instance HsLua.Class.Pushable.Pushable a => HsLua.Class.Pushable.Pushable [a] instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b) => HsLua.Class.Pushable.Pushable (Data.Map.Internal.Map a b) instance HsLua.Class.Pushable.Pushable a => HsLua.Class.Pushable.Pushable (Data.Set.Internal.Set a) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b) => HsLua.Class.Pushable.Pushable (a, b) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b, HsLua.Class.Pushable.Pushable c) => HsLua.Class.Pushable.Pushable (a, b, c) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b, HsLua.Class.Pushable.Pushable c, HsLua.Class.Pushable.Pushable d) => HsLua.Class.Pushable.Pushable (a, b, c, d) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b, HsLua.Class.Pushable.Pushable c, HsLua.Class.Pushable.Pushable d, HsLua.Class.Pushable.Pushable e) => HsLua.Class.Pushable.Pushable (a, b, c, d, e) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b, HsLua.Class.Pushable.Pushable c, HsLua.Class.Pushable.Pushable d, HsLua.Class.Pushable.Pushable e, HsLua.Class.Pushable.Pushable f) => HsLua.Class.Pushable.Pushable (a, b, c, d, e, f) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b, HsLua.Class.Pushable.Pushable c, HsLua.Class.Pushable.Pushable d, HsLua.Class.Pushable.Pushable e, HsLua.Class.Pushable.Pushable f, HsLua.Class.Pushable.Pushable g) => HsLua.Class.Pushable.Pushable (a, b, c, d, e, f, g) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Pushable.Pushable b, HsLua.Class.Pushable.Pushable c, HsLua.Class.Pushable.Pushable d, HsLua.Class.Pushable.Pushable e, HsLua.Class.Pushable.Pushable f, HsLua.Class.Pushable.Pushable g, HsLua.Class.Pushable.Pushable h) => HsLua.Class.Pushable.Pushable (a, b, c, d, e, f, g, h) -- | Call Haskell functions from Lua. module HsLua.Class.Exposable -- | Operations and functions that can be pushed to the Lua stack. This is -- a helper function not intended to be used directly. Use the -- toHaskellFunction wrapper instead. class PeekError e => Exposable e a -- | Helper function, called by toHaskellFunction. Should -- do a partial application of the argument at the given index to the -- underlying function. Recurses if necessary, causing further partial -- applications until the operation is a easily exposable to Lua. partialApply :: Exposable e a => StackIndex -> a -> LuaE e NumResults -- | Convert a Haskell function to a function type directly exposable to -- Lua. Any Haskell function can be converted provided that: -- --
-- toHaskellFunction (myFun `catchM` (\e -> raiseError (e :: FooException))) --toHaskellFunction :: forall e a. Exposable e a => a -> HaskellFunction e -- | Imports a Haskell function and registers it at global name. registerHaskellFunction :: Exposable e a => Name -> a -> LuaE e () instance HsLua.Class.Peekable.PeekError e => HsLua.Class.Exposable.Exposable e (HsLua.Core.Types.HaskellFunction e) instance (HsLua.Class.Peekable.PeekError e, HsLua.Class.Pushable.Pushable a) => HsLua.Class.Exposable.Exposable e (HsLua.Core.Types.LuaE e a) instance (HsLua.Class.Peekable.Peekable a, HsLua.Class.Exposable.Exposable e b) => HsLua.Class.Exposable.Exposable e (a -> b) -- | HsLua utility functions. module HsLua.Class.Util -- | Raise a Lua error, using the given value as the error object. raiseError :: (PeekError e, Pushable a) => a -> LuaE e NumResults -- | Newtype wrapper intended to be used for optional Lua values. Nesting -- this type is strongly discouraged as missing values on inner levels -- are indistinguishable from missing values on an outer level; wrong -- values would be the likely result. newtype Optional a Optional :: Maybe a -> Optional a [fromOptional] :: Optional a -> Maybe a -- | Try to convert the value at the given stack index to a Haskell value. -- Returns Left with the error on failure. peekEither :: (PeekError e, Peekable a) => StackIndex -> LuaE e (Either e a) -- | Get, then pop the value at the top of the stack. The pop operation is -- executed even if the retrieval operation failed. popValue :: (PeekError e, Peekable a) => LuaE e a instance HsLua.Class.Peekable.Peekable a => HsLua.Class.Peekable.Peekable (HsLua.Class.Util.Optional a) instance HsLua.Class.Pushable.Pushable a => HsLua.Class.Pushable.Pushable (HsLua.Class.Util.Optional a) -- | Call Lua functions from Haskell. module HsLua.Class.Invokable -- | Helper class used to make Lua functions useable from Haskell. class PeekError e => Invokable e a addArg :: Invokable e a => Name -> LuaE e () -> NumArgs -> a -- | Invoke a Lua function. Use as: -- --
-- v <- invoke "proc" "abc" (1::Int) (5.0::Double) --invoke :: forall e a. Invokable e a => Name -> a instance (HsLua.Class.Peekable.PeekError e, HsLua.Class.Peekable.Peekable a) => HsLua.Class.Invokable.Invokable e (HsLua.Core.Types.LuaE e a) instance (HsLua.Class.Pushable.Pushable a, HsLua.Class.Peekable.PeekError e, HsLua.Class.Invokable.Invokable e b) => HsLua.Class.Invokable.Invokable e (a -> b) -- | Convenience module which re-exports all classes and utility functions -- provided by the hslua-classes package. module HsLua.Classes -- | A value that can be read from the Lua stack. class Peekable a -- | Check if at index n there is a convertible Lua value and if -- so return it. Throws a Exception otherwise. peek :: (Peekable a, PeekError e) => StackIndex -> LuaE e a -- | Try to convert the value at the given stack index to a Haskell value. -- Returns Left with the error on failure. peekEither :: (PeekError e, Peekable a) => StackIndex -> LuaE e (Either e a) -- | Read a table into a list peekList :: (PeekError e, Peekable a) => StackIndex -> LuaE e [a] -- | Read a table into a list of pairs. peekKeyValuePairs :: (Peekable a, Peekable b, PeekError e) => StackIndex -> LuaE e [(a, b)] -- | A value that can be pushed to the Lua stack. class Pushable a -- | Pushes a value onto Lua stack, casting it into meaningfully nearest -- Lua type. push :: (Pushable a, LuaError e) => a -> LuaE e () -- | Push list as numerically indexed table. pushList :: (LuaError e, Pushable a) => [a] -> LuaE e () -- | Operations and functions that can be pushed to the Lua stack. This is -- a helper function not intended to be used directly. Use the -- toHaskellFunction wrapper instead. class PeekError e => Exposable e a -- | Helper function, called by toHaskellFunction. Should -- do a partial application of the argument at the given index to the -- underlying function. Recurses if necessary, causing further partial -- applications until the operation is a easily exposable to Lua. partialApply :: Exposable e a => StackIndex -> a -> LuaE e NumResults -- | Convert a Haskell function to a function type directly exposable to -- Lua. Any Haskell function can be converted provided that: -- --
-- toHaskellFunction (myFun `catchM` (\e -> raiseError (e :: FooException))) --toHaskellFunction :: forall e a. Exposable e a => a -> HaskellFunction e -- | Invoke a Lua function. Use as: -- --
-- v <- invoke "proc" "abc" (1::Int) (5.0::Double) --invoke :: forall e a. Invokable e a => Name -> a -- | Imports a Haskell function and registers it at global name. registerHaskellFunction :: Exposable e a => Name -> a -> LuaE e () -- | Raise a Lua error, using the given value as the error object. raiseError :: (PeekError e, Pushable a) => a -> LuaE e NumResults -- | Newtype wrapper intended to be used for optional Lua values. Nesting -- this type is strongly discouraged as missing values on inner levels -- are indistinguishable from missing values on an outer level; wrong -- values would be the likely result. newtype Optional a Optional :: Maybe a -> Optional a [fromOptional] :: Optional a -> Maybe a -- | Get, then pop the value at the top of the stack. The pop operation is -- executed even if the retrieval operation failed. popValue :: (PeekError e, Peekable a) => LuaE e a