homepage: https://github.com/woehr/open-adt
changelog-type: ''
hash: 1d84815d39d948e6f502888a26d01744e9852c722b280f8f97c6445da5b51297
test-bench-deps: {}
maintainer: Jordan Woehr
synopsis: Open algebraic data types.
changelog: ''
basic-deps:
  row-types: ! '>=0.2.3 && <1'
  base: ! '>=4.9 && <5'
  constraints: ! '>=0.8 && <1'
  recursion-schemes: ! '>=5 && <6'
  template-haskell: ! '>=2.12 && <3'
all-versions:
- '1.0'
author: ''
latest: '1.0'
description-type: haddock
description: ! 'This library, built upon row-types, provides types and functions

  for variants of various functors that all have the same type

  applied to them. This is very similar to, and inspired by,

  <https://github.com/haskus/haskus-utils haskus-utils-variant>.

  At the time of writing, the compile-time performance of

  haskus-utils-variant is poor for variants with many fields, which

  should be improved in this package by using row-types.


  The main types of interest in this package are ''VarF'' and

  ''OpenADT''. ''VarF'' wraps a variant of functors, all over the same

  type, and provides a functor instance that fmaps over whatever

  the variant is. ''OpenADT'' is the fixed-point type of ''VarF'',

  which allows for recursive structures to be created.


  A convenience function, ''mkVarPattern'' from ''Data.OpenADT.TH'',

  generates patterns that can be used as constructors for variants.

  The key aspect of these patterns is that they are polymorphic

  in the type of the row, allowing them to be used as constructors

  for any open algebraic data type that includes a particular

  constructor.


  For examples, see the ''Data.OpenADT.Tutorial'' module.'
license-name: BSD3

Update from Hackage at 2018-11-25T18:30:21Z
Update from Hackage at 2018-11-25T18:30:21Z
