Files
petzval/lib/Petzval/Types.hs

17 lines
519 B
Haskell

{-# LANGUAGE FlexibleInstances, UndecidableInstances, FlexibleContexts #-}
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