extensible-0.2.3: src/Data/Extensible.hs
-----------------------------------------------------------------------------
-- |
-- Module : Data.Extensible
-- Copyright : (c) Fumiaki Kinoshita 2015
-- License : BSD3
--
-- Maintainer : Fumiaki Kinoshita <fumiexcel@gmail.com>
-- Stability : experimental
-- Portability : non-portable
--
-- This package defines an extensible type-indexed product type and a union type.
-- Extensible ADTs provided by this module are determined from a type-level list @[k]@
-- and a wrapper @k -> *@.
-- We can define ADTs not only for plain values, but also parameterized ones.
--
-- >>> let t = K0 (42 :: Int) <:* K0 "foo" <:* K0 (Just "bar") <:* Nil
-- >>> t
-- K0 42 <:* K0 "foo" <:* K0 (Just "bar") <:* Nil
-- >>> :t t
-- t :: K0 :* '[Int, [Char], Maybe [Char]]
-- >>> pluck t :: Int
-- 42
-----------------------------------------------------------------------------
module Data.Extensible (
-- * Reexport
module Data.Extensible.Inclusion
, module Data.Extensible.Match
, module Data.Extensible.Plain
, module Data.Extensible.Product
, module Data.Extensible.Sum
) where
import Data.Extensible.Inclusion
import Data.Extensible.Match
import Data.Extensible.Plain
import Data.Extensible.Product
import Data.Extensible.Sum
-------------------------------------------------------------