{-# 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\)
        * '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:-}
        , SequentiallyInterpolatedList(..)
        , module Imj.Graphics.Interpolation.Evolution
         -- * Reexports
         , 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