{-# LANGUAGE Safe #-}
----------------------------------------------------------------------------------
-- |
-- Module      : Data.Extend
-- Copyright   : (c) Yu Li, 2015
-- License     : BSD
-- Maintainer  : ylilarry@gmail.com
-- Stability   : experimental
-- Portability : GHC extensions
--
-- This package allows you to extend a Haskell data like how you do in OOP.
--
-- Here is an example use for testing:
--
-- >
-- > data Test = Test | TestA {
-- >       f1 :: Int,
-- >       f2 :: Maybe Int,
-- >       f3 :: Maybe Int
-- >    } deriving (Show, Generic, Eq)
-- >
-- > test1A = TestA 1 (Just 1) (Just 3)
-- > test2A = TestA 0 Nothing (Just 2)
-- >
-- > main :: IO ()
-- > main = hspec $
-- >    describe "Data.Extend" $ do
-- >       specify "Int" $
-- >          (2 `extend` 1) `shouldBe` (2 :: Int)
-- >       specify "String" $
-- >          ("b" `extend` "a") `shouldBe` "b"
-- >       specify "data 0" $
-- >          (Test `extend` Test) `shouldBe` Test
-- >       specify "data 1" $
-- >          (test2A `extend` test1A) `shouldBe` TestA 0 (Just 1) (Just 2)
-- >
--
----------------------------------------------------------------------------------

module Data.Extend (
      Extend(..)
   ) where

import Data.Extend.Internal