# LANGUAGE NoImplicitPrelude #

module Imj.Graphics.Interpolation
        ( -- * Discrete interpolation and morphing
  | 
         * ' DiscreteInterpolation ' describes interpolation /by value/ 
         , where the result of the interpolation between two \(v\ ) is a \(v\ ) 
         * '  ' and '  ' describe a morphing between 
         /drawn/ representations of \(v\ ) . 

         These classes rely on the ' DiscreteDistance ' class : 
        
        * 'DiscreteInterpolation' describes interpolation /by value/
        , where the result of the interpolation between two \(v\) is a \(v\)
        * 'DiscreteMorphing' and 'DiscreteColorableMorphing' describe a morphing between
        /drawn/ representations of \(v\).

        These classes rely on the 'DiscreteDistance' class:
        -}
          DiscreteDistance(..)
        , Successive(..)
          -- ** Interpolation
        , DiscreteInterpolation(..)
          -- ** Morphing
        , DiscreteMorphing(..)
        , DiscreteColorableMorphing(..)
          -- * Lists interpolations
| The ' DiscreteInterpolation ' instance on [ ] defines a parallel 
           interpolation ( interpolation occurs at the same time for all same - index 
           elements ) . 

           To interpolate sequentially ( i.e one index at a time ) , use 
           ' SequentiallyInterpolatedList ' instead :
          interpolation (interpolation occurs at the same time for all same-index
          elements).

          To interpolate sequentially (i.e one index at a time), use
          'SequentiallyInterpolatedList' instead:-}
        , SequentiallyInterpolatedList(..)
        , module Imj.Graphics.Interpolation.Evolution
  * 
         , module Imj.Iteration
        ) where

import           Imj.Graphics.Class.DiscreteInterpolation
import           Imj.Graphics.Class.DiscreteColorableMorphing
import           Imj.Graphics.Interpolation.Evolution
import           Imj.Graphics.Interpolation.SequentiallyInterpolatedList
import           Imj.Iteration

 * Discrete interpolation and morphing
 ** Interpolation
 ** Morphing
 * Lists interpolations
# LANGUAGE NoImplicitPrelude #

module Imj.Graphics.Interpolation
  | 
         * ' DiscreteInterpolation ' describes interpolation /by value/ 
         , where the result of the interpolation between two \(v\ ) is a \(v\ ) 
         * '  ' and '  ' describe a morphing between 
         /drawn/ representations of \(v\ ) . 

         These classes rely on the ' DiscreteDistance ' class : 
        
        * 'DiscreteInterpolation' describes interpolation /by value/
        , where the result of the interpolation between two \(v\) is a \(v\)
        * 'DiscreteMorphing' and 'DiscreteColorableMorphing' describe a morphing between
        /drawn/ representations of \(v\).

        These classes rely on the 'DiscreteDistance' class:
        -}
          DiscreteDistance(..)
        , Successive(..)
        , DiscreteInterpolation(..)
        , DiscreteMorphing(..)
        , DiscreteColorableMorphing(..)
| The ' DiscreteInterpolation ' instance on [ ] defines a parallel 
           interpolation ( interpolation occurs at the same time for all same - index 
           elements ) . 

           To interpolate sequentially ( i.e one index at a time ) , use 
           ' SequentiallyInterpolatedList ' instead :
          interpolation (interpolation occurs at the same time for all same-index
          elements).

          To interpolate sequentially (i.e one index at a time), use
          'SequentiallyInterpolatedList' instead:-}
        , SequentiallyInterpolatedList(..)
        , module Imj.Graphics.Interpolation.Evolution
  * 
         , module Imj.Iteration
        ) where

import           Imj.Graphics.Class.DiscreteInterpolation
import           Imj.Graphics.Class.DiscreteColorableMorphing
import           Imj.Graphics.Interpolation.Evolution
import           Imj.Graphics.Interpolation.SequentiallyInterpolatedList
import           Imj.Iteration
