-- |
-- Module      : Data.OpenADT
-- Copyright   : Copyright (c) Jordan Woehr, 2018
-- License     : BSD
-- Maintainer  : Jordan Woehr
-- Stability   : experimental
--
-- This module defines the 'OpenADT' type, which is an algebraic data type
-- with constructors defined by its argument's row type.

module Data.OpenADT
  ( module Data.OpenADT
  , module Data.OpenADT.TH
  , module Data.OpenADT.VarF
  , module Data.OpenADT.VariantsF
  )
where

import           Data.Functor.Foldable                    ( Fix(..) )
import           Data.OpenADT.TH
import           Data.OpenADT.VarF
import           Data.OpenADT.VariantsF

-- | A algebraic data type that can have constructors added and removed.
type OpenADT r = Fix (VarF r)