{-# LANGUAGE TypeOperators #-}

-- |
-- Module      : Data.Binding.Hobbits
-- Copyright   : (c) 2011 Edwin Westbrook, Nicolas Frisby, and Paul Brauner
--
-- License     : BSD3
--
-- Maintainer  : emw4@rice.edu
-- Stability   : experimental
-- Portability : GHC
--
-- This library implements multi-bindings as described in the paper
-- E. Westbrook, N. Frisby, P. Brauner, \"Hobbits for Haskell: A Library for
-- Higher-Order Encodings in Functional Programming Languages\".

module Data.Binding.Hobbits (
  -- * Values under multi-bindings
  module Data.Binding.Hobbits.Mb,
  -- | The 'Data.Binding.Hobbits.Mb.Mb' type modeling multi-bindings is the
  -- central abstract type of the library

  -- * Ancilliary modules
  module Data.Type.List,
  -- | Type lists track the types of bound variables.
  module Data.Binding.Hobbits.SuperComb,
  -- | The 'Data.Binding.Hobbits.SuperComb.SuperComb' type models
  -- super-combinators, which are safe functions to apply under
  -- 'Data.Binding.Hobbits.Mb.Mb'.
  module Data.Binding.Hobbits.QQ,
  -- | The 'Data.Binding.Hobbits.QQ.nuQQ' quasiquoter allows safe pattern
  -- matching on 'Data.Binding.Hobbits.Mb.Mb' values.
  module Data.Binding.Hobbits.PatternParser,
  -- | A simple parser for Haskell patterns.
  module Data.Binding.Hobbits.NuElim
  -- | The "Data.Binding.Hobbits.NuElim" module allows elimination of
  -- bindings and multi-bindings; NOTE: this module is not covered in
  -- the \"Hobbits for Haskell\" paper.
                            ) where

import Data.Type.List
import Data.Binding.Hobbits.Mb
import Data.Binding.Hobbits.SuperComb
import Data.Binding.Hobbits.QQ
import Data.Binding.Hobbits.PatternParser
import Data.Binding.Hobbits.NuElim