{-# LANGUAGE CPP #-}

-- |
-- Module      :  Linear.Vector.Compat
-- Copyright   :  (c) 2024 diagrams-lib team (see LICENSE)
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  diagrams-discuss@googlegroups.com
--
-- Compatibility layer for working with versions of linear both before
-- (< 1.23) and after (>= 1.23) the interpolation direction of `lerp`
-- was reversed.
module Linear.Vector.Compat (lerp) where

import qualified Linear.Vector as V

-- | Linearly interpolate between two vectors, such that @lerp 0 x y =
--   x@ and @lerp 1 x y = 1@.
lerp :: (V.Additive f, Num a) => a -> f a -> f a -> f a
lerp :: forall (f :: * -> *) a.
(Additive f, Num a) =>
a -> f a -> f a -> f a
lerp =
#if MIN_VERSION_linear(1,23,0)
  a -> f a -> f a -> f a
forall a. Num a => a -> f a -> f a -> f a
forall (f :: * -> *) a.
(Additive f, Num a) =>
a -> f a -> f a -> f a
V.lerp
#else
  V.lerp . (1-)
#endif