
is there anyway the modifyWith functions could work on uboxed types?
If they're inlined, the modify functions on boxed types may well end up unboxed.
What's the particular problem you're having?
well, after inspecting a little further its not so bad actually. i was comparing module Main where import qualified Data.Vector.Dense.IO as Vector import Control.Monad e = exp 1.0 sigmoid xx = 1.0 / (1 + (e ** (1.0 * xx))) type Vec = Vector.IOVector Int Double main = do let size = 100000 ff::Vec <- Vector.newListVector size $ repeat 0.5 replicateM_ 1000 $ Vector.modifyWith (sigmoid) ff putStrLn $ "done" to this: #include "math.h" #include "stdlib.h" #include "stdio.h" double sigmoid(double xx) { return 1.0 / (1.0 + (pow(M_E, (1.0 * xx)))); } int main() { int size = 100000; int times = 1000; int ii,jj; double* array = malloc(sizeof(double)*size); for(jj = 0; jj < size; ++jj) { array[jj] = 0.5; } for(ii = 0; ii < times; ++ii) { for(jj = 0; jj < size; ++jj) { array[jj] = sigmoid(array[jj]); } } printf("done\n"); } the haskell version does ok, or 0m37.937s vs 0m23.492s in C. I am compiling with these options: -O2 -fexcess-precision -funbox-strict-fields -fglasgow-exts -fbang-patterns -prof -auto-all, and O2 for gcc.