# Changelog

`hslua-objectorientation` uses [PVP Versioning][].

## hslua-objectorientation-2.5.0

Released 2026-01-08.

- Removed function `udDocs`. It is not very useful and appears to
  be unused.

- Allow *hslua-typing* 0.2.\*.

## hslua-objectorientation-2.4.0

Released 2025-06-23.

-   The code has been reorganized: the new submodules
    `HsLua.ObjectOrientation.Generic` and
    `HsLua.ObjectOrientation.ListType` have been added.

-   The `UDTypeGeneric` type has been updated, the definitions for
    Lua types can now contain additional hooks to modify the
    behavior when initializing the type and when pushing and
    pulling objects to and from Lua.

-   The function `pushUDGeneric` is modified and no longer takes a
    `pushDocs` parameter. Use the new type hooks instead.

-   Removed the extra hook from `initTypeGeneric` and renamed it
    to `initType`. The hook, if one is needed, must now be part of
    the UDTypeGeneric object.

-   The default `__index` and `__newindex` functions have been
    simplified and no longer handle integer keys. Consequently,
    list-like types now need their own `__index` and `__newindex`
    functions. These can handle numerical indices and fall back to
    the default functions for other keys.

    The new file `hslobj.h` contains the headers of the default
    access functions. It is added to the `install-includes` cabal
    field.

## hslua-objectorientation-2.3.1

Released 2024-01-18.

-   Relaxed upper bound for text, containers, and bytestring,
    allowing text-2.1, containers-0.7, and bytestring-0.12.

## hslua-objectorientation-2.3.0

Released 2023-03-13.

-   Export all constructors and functions of type `Property`.

-   Renamed `peekUD` to `peekUDGeneric` and `pushUD` to
    `pushUDGeneric`.  Functions with the old names are now
    now defined hslua-packaging.

-   Hook for udtype metatable initializer. The function
    `pushUDGeneric` takes an additional `hook` parameter. The hook
    operation can be used to perform additional setup operations,
    e.g., for documentation.

    The old `pushUD` function can be recovered with

        pushUD = pushUDGeneric (\_ -> pure ())

    The `hslua-packaging` now exports a `pushUD` functions that is
    specialized to documented types.

-   Export new function `initTypeGeneric`: The function ensures
    that a type's metatable is initialized and available from the
    registry. Just like with `pushUDGeneric`, a hook can be used
    to augment the initialization.

-   Type info for properties: Properties are amended with
    information on the property's type. The functions `property`,
    `possibleProperty`, and `readonly` each now come with typed
    version `property'`, `possibleProperty'`, and `readonly`'.
    This allows to specify the type of a property value.

-   Functions for object typing info: The functions `udDocs` and
    `udTypeSpec` are added, enabling the generation of typing
    information for UDType objects.

## hslua-objectorientation-2.2.1

Released 2022-06-19.

-   Require hslua-core-2.2.1.

-   Require hslua-marshalling-2.2.1.

## hslua-objectorientation-2.2.0.1

Released 2022-05-20.

-   Relax upper bound for mtl, allow mtl-2.3.

## hslua-objectorientation-2.2.0

Released 2022-02-19.

-   Require version 2.2 of hslua-core and hslua-marshalling.

## hslua-objectorientation-2.1.0

Released 2022-01-29.

-   Allow integers as aliases: Aliases can now be of type
    `AliasIndex`, so integers can now be defined as aliases for
    other properties. The function `alias` now takes an
    `AliasIndex` instead of a `Name`; the change entails
    modifications to the types `UDTypeWithList`, `UDType`, and
    `Member`. Also, `AliasIndex` is made into an instance of the
    Eq and Ord type classes.

-   Reworked list representation of objects, allowing write access
    to list components.

    The `ListSpec` type has been updated and contains now a pair
    of pairs, where the inner pairs define how to push and
    retrieve lists, respectively. Users of the `deftypeGeneric'`
    function will have to update their code.

-   Fixed some integer type declarations in C code. Some variables
    had been given incorrect types, like `int` instead of
    `lua_Integer`. They are usually the same, but may differ in
    some setups.

-   Require hslua-core-2.1.0 and hslua-marshalling-2.1.0, or
    later.

## hslua-objectorientation-2.0.1

Released 2021-11-04.

-   Excludes absent properties from `pairs`: Properties that are
    optional and not present in a sum-type value are no longer
    included in the iterator output produced by `pairs` (i.e., the
    `__pairs` metamethod). Previously, the names of absent
    properties were pushed with a `nil` value.

## hslua-objectorientation-2.0.0

Released 2021-10-21.

-   Published without warning.

  [PVP Versioning]: https://pvp.haskell.org
