便利なんですが、なんとなくズルをしている気分になります。Haskellっぽくないと。
import Foreign.Marshal.Array import Foreign.Ptr import Foreign.Storable import Data.Word main = do a <- mallocArray 10 :: IO (Ptr Word32) peekElemOff a 0 >>= print -- index 0 の内容は0 pokeElemOff a 0 10 -- index 0 に10を設定 peekElemOff a 0 >>= print -- index 0 の内容は10 pokeElemOff a 10 10 -- index 10 に10を設定(いいのか?) peekElemOff a 10 >>= print -- index 10 の内容は10(ほんとにいいのか?)
ポインタとして扱っているので、範囲外をアクセスしてもエラーにならないみたいです。
正直な気持ちとしては、できれば使いたくない。けど必要に迫られて使うことになりそうな内容。