エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Foreign

便利なんですが、なんとなくズルをしている気分になります。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(ほんとにいいのか?)

ポインタとして扱っているので、範囲外をアクセスしてもエラーにならないみたいです。
正直な気持ちとしては、できれば使いたくない。けど必要に迫られて使うことになりそうな内容。