From a16185618aa6f483f587f8a0c65031fc479afac7 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Sun, 23 Feb 2025 21:57:40 +0100 Subject: Remove redundant Num constraint on writeTape --- src/Numeric/ADDual/Internal.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Numeric/ADDual/Internal.hs b/src/Numeric/ADDual/Internal.hs index 5dd84aa..c568232 100644 --- a/src/Numeric/ADDual/Internal.hs +++ b/src/Numeric/ADDual/Internal.hs @@ -28,6 +28,9 @@ import System.IO.Unsafe import System.IO (hPutStrLn, stderr) +-- TODO: type roles on 's' + + debug :: Bool debug = toEnum 0 @@ -190,7 +193,7 @@ instance (Floating a, Storable a, Taping s a) => Floating (Dual s a) where constant :: a -> Dual s a constant x = Dual x (-1) -mkDual :: forall a s. (Num a, Storable a, Taping s a) => a -> Int -> a -> Int -> a -> Dual s a +mkDual :: forall a s. (Storable a, Taping s a) => a -> Int -> a -> Int -> a -> Dual s a mkDual res i1 dx i2 dy = Dual res (writeTapeUnsafe @a (Proxy @s) i1 dx i2 dy) data WriteTapeAction a = WTANewvec (VSM.IOVector (Contrib a)) @@ -198,10 +201,10 @@ data WriteTapeAction a = WTANewvec (VSM.IOVector (Contrib a)) -- This NOINLINE really doesn't seem to matter for performance, so let's be safe {-# NOINLINE writeTapeUnsafe #-} -writeTapeUnsafe :: forall a s proxy. (Num a, Storable a, Taping s a) => proxy s -> Int -> a -> Int -> a -> Int +writeTapeUnsafe :: forall a s proxy. (Storable a, Taping s a) => proxy s -> Int -> a -> Int -> a -> Int writeTapeUnsafe _ i1 dx i2 dy = unsafePerformIO $ writeTapeIO (Proxy @s) i1 dx i2 dy -writeTapeIO :: forall a s proxy. (Num a, Storable a, Taping s a) +writeTapeIO :: forall a s proxy. (Storable a, Taping s a) => HasCallStack => proxy s -> Int -> a -> Int -> a -> IO Int writeTapeIO _ i1 dx i2 dy = do -- cgit v1.2.3-70-g09d2