{-# LANGUAGE FlexibleInstances, UndecidableInstances #-} module Petzval.Types(Calcuable) where import Numeric.AD.Mode import Numeric.AD.Mode.Reverse.Double import Numeric.AD.Internal.Reverse.Double import Data.Reflection (Reifies) import Linear(Epsilon(..)) class (RealFloat n, Scalar n ~ Double, Epsilon n, Mode n) => Calcuable n instance (RealFloat n, Scalar n ~ Double, Epsilon n, Mode n) => Calcuable n instance Reifies s Tape => Epsilon (ReverseDouble s) where nearZero s = abs s <= 1e-12