# 0.5.0.0

## Serialization

In `Capnp.Untyped`, The `dataSection` and `ptrSection` APIs have been
removed. `structDataSize` has been replaced with `structWordCount`,
and new functions `structByteCount and `structPtrCount` have been added.

## RPC

This release brings some improvements to the RPC API:

* Add `newPromiseClient` for creating a promise-based client that can
  be fulfilled later.
* Make `Client` an instance of `IsClient`.
* Previously, there were a number of functions that had two variants:
  * `foo`, which ran in `IO`
  * `fooSTM`, which ran in `STM`.

  Now there is just one variant, `foo`, which is polymorphic over
  `MonadSTM`, defined by the `monad-stm` package. There are instances of
  this class for `IO`, `STM`, and any monad transformer applied to an
  instance.

  Note that previously some of the `foo` variants were polymorphic over
  `MonadIO`. Unfortunately it is not possible to define a general instance
  `MonadIO m => MonadSTM m`, but for a particular mtl stack that
  has an instance of `MonadIO`, you can fix the problem by defining:

  ```haskell
  instance MonadSTM MyStack where
      liftSTM = liftIO . liftSTM
  ```

  Or, you can add `liftIO`/`liftSTM` to the appropriate call sites.

# 0.4.0.0

* RPC support! This should be considered alpha quality for now. The API
  will likely change substantially.
* Many bug fixes; users are strongly encouraged to upgrade.
* Reorganization of the module hierarchy:
  * Generated code is now placed under `Capnp.Gen`, rather than `Capnp`.
  * The `Data` prefix has been removed from the `Data.Capnp` hierarchy.
* The included generated modules for the core schema have been updated
  to those shipped with version 0.7 of the reference implementation.
* Other miscellaneous API Changes:
  * `createPure` can now be used with any instance of `MonadThrow`, not
    just `Either SomeException`.
  * `LimitT m` is now an instance of `MonadIO`, provided that `m` is an
    instance.
  * More type class instances from elsewhere in the library are
    re-exported via the `Capnp` module.
  * The `IsPtr` type class has been split into `FromPtr` and `ToPtr`. Most
    user code should not care about this.
  * Generated high-level types no longer have Read instances; interfaces
    make this problematic.
  * Getters for anonymous unions are now `get_Foo'` instead of
    `get_Foo'union'`.
  * `newMessage` now accepts an optional size hint.
  * Instances of `Cerialize` now exist/are generated for
    `(Vector (Vector (Vector ...)))` up to a reasonable depth.
* Other improvements not directly reflected in the API:
  * The allocation strategy has changed to reduce unnecessary copying.
  * It is now possible to create messages with a size > 2GiB. Note that
    individual segments are still limited.

# 0.3.0.0

* Instances of some type classes are no longer generated for "second
  class" types (i.e. types which cannot appear as stand-alone
  definitions in schema files -- groups and unions).
* `has_*` functions are now only generated for pointer fields.
* Various non-functional changes in the output of the code generator.
* We now generate constants for (most) pointer types; previously
  constants defined in a schema would not result in any generated code
  ([#41][issue41]).
* The `set_*` functions now check if the arguments are in the same
  message, and copy if need be ([#34][issue34]).
* `MutMsg` is now an instance of `Eq`.
* The `HasMessage` class from `Data.Capnp.Untyped` is now a type family,
  rather than a multi-parameter type class. This improves inference and
  removes some superfluous generalization.
* The module `Data.Capnp.Pure` has been folded into `Data.Capnp`. If you
  were previously using the `Text` and `Data` type aliases it exported,
  you should instead use `Text` from `Data.Text` and `ByteString` from
  `Data.ByteString`; the `Text` and `Data` exported by `Data.Capnp` are
  types from the low-level API.

# 0.2.0.0

* Redesign the 'Mutable' type class's API.
* Provide helpers for doing zero-copy message creation in pure code.
* General improvements to the documentation.

# 0.1.0.0

* First release; basic read & write support, serialization only.

[issue41]: https://github.com/zenhack/haskell-capnp/issues/41
[issue34]: https://github.com/zenhack/haskell-capnp/issues/34
