polytropos-aeson: High-performance aeson JSON codecs for polytropos open records and variants

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Linear O(N) Data.Aeson.ToJSON and Data.Aeson.FromJSON serialization codecs for polytropos open records and variants via aeson.

Unlike GHC.Generics which builds intermediate binary tree nodes during serialization, polytropos-aeson unrolls the flat contiguous Data.Primitive.SmallArray.SmallArray payload directly into a JSON object and back. Variants serialize into tagged JSON objects with O(1) tag dispatch.

Start at the front door module Polytropos.Aeson for complete documentation, codec options, and worked examples.


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.2, 0.1.0.3
Change log CHANGELOG.md
Dependencies aeson (>=2.0 && <2.3), base (>=4.14 && <5), bytestring (>=0.10 && <0.13), polytropos-core (>=0.1 && <0.2), polytropos-plugin (>=0.1 && <0.2), text (>=1.2 && <2.2) [details]
License (EUPL-1.2 OR Apache-2.0)
Author Nadia Yvette Chambers
Maintainer nadia.yvette.chambers@ik.me
Category Data, JSON
Home page https://github.com/NadiaYvette/polytropos
Bug tracker https://github.com/NadiaYvette/polytropos/issues
Source repo head: git clone https://github.com/NadiaYvette/polytropos(packages/polytropos-aeson)
Uploaded by nyc at 2026-10-17T18:55:18Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for polytropos-aeson-0.1.0.0

[back to package description]

polytropos-aeson

High-performance aeson JSON serialization and deserialization codecs for polytropos open records and variants.

Overview

Unlike GHC.Generics which builds intermediate binary tree nodes ((:*:), (:+:)) during serialization, polytropos-aeson unrolls the flat contiguous SmallArray payload directly into JSON objects and back. Open variants serialize into tagged JSON objects with \(O(1)\) tag dispatch.

Features

Quick Example

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fplugin=Polytropos.Plugin #-}

import Data.Aeson (encode, decode)
import Polytropos
import Polytropos.Aeson ()

type Config = Record '[ "host" := String, "port" := Int ]

main :: IO ()
main = do
  let cfg = REC { host = "localhost", port = 8080 } :: Config
  print (encode cfg)

License

Dual-licensed under EUPL-1.2 OR Apache-2.0.