Je vois que je peux mapper une fonction sur des tableaux mutables avec mapArray, mais il ne semble pas y avoir quelque chose comme mapM (et mapM_). mapArray ne me laisse pas imprimer ses éléments, par exemple:Quelque chose comme mapM, mais pour les tableaux? (comme arrayMap, mais mappage d'une fonction impure)
import Data.Array.Storable
arr <- newArray (1,10) 42 :: IO -- answer to Life, Universe and Everything
x <- readLn :: IO Int
mapArray (putStrLn.show) arr -- <== this doesn't work!
Le résultat sera:
No instances for (MArray StorableArray Int m,
MArray StorableArray (IO()) m)
arising from a use of `mapArray' at <interactive>:1:0-27
Possible fix:
add an instance declaration for
(MArray StorableArray Int m, MArray StorableArray (IO()) m)
In the expression: mapArray (putStrLn . show) arr
In the definition of `it': it = mapArray (putStrLn . show) arr
Y at-il quelque chose comme ça dans Haskell (ou GHC même si Haskell pas standard)?
De plus, je n'ai trouvé aucune fonction foldr/foldl pour les tableaux (mutables ou non). Est-ce qu'ils existent?
Merci beaucoup!
Merci beaucoup! forM_ [1..10 :: Int] $ (\ i -> readArray arr i >> = putStrLn.show) fonctionne pour putStrLn (et devrait fonctionner pour d'autres fonctions impures). uvector semble très agréable. Recommanderiez-vous uvector ou StorableArrays si je veux appeler les fonctions C via FFI en code critique de vitesse? – Jay
"si je veux appeler les fonctions C via FFI en code critique de vitesse?" --- alors vous devez utiliser des tableaux étrangers ou stockables, car ils sont épinglés en mémoire. –