diff options
Diffstat (limited to 'src/Numeric/ADDual/Internal.hs')
-rw-r--r-- | src/Numeric/ADDual/Internal.hs | 9 |
1 files 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 |