> でもとりあえずコードを書き直さないでいい方法として暫定的に (!) を作って
> 目的のプログラムを IOArray 用に修正してみたところ、newListArray のせいで
> か変な振る舞いを示します。

??
これって、どういう意味でしょう? 
「変な振舞い」というのはプログラムの振舞いのことですか?コンパイラの振舞い
のことですか?
「newListArray のせい」ではなくて、それをまちがって使った所為ではない
でしょうか?罪は newListArray にはないのではないかしらん。

> (listArray では大丈夫)

??
listArray は自前で定義したのですか?それで上手くいくのなら、なぜそれを
使わないのでしょうか?

> Data.Array.MArray.newListArray の定義自体には何も変なところがないのでき
> ちんと動くはずだと思っていたのですが、コードのどのあたりに問題があるの
> でしょうか?

ちゃんと動くはずという根拠を「Data.Array.MArray.newListArray の定義自体には
何も変なところがない」ことに置くのは変じゃありませんか?
「Data.Array.MArray.newListArray の定義自体には何も変なところがな」くても
使い方を間違えるときちんとは動きませんよね。

> lowpassFilter ::  IOArray Point Color ->  IOArray Point Color
> lowpassFilter pixels
>    = newListArray (bounds pixels) [lowpass p | p <- indices pixels]

の部分ですが、

  lowpassFilter :: IOArray Point Color -> IOArray Point Color

と宣言していますから、定義の左辺 lowpassFilter pixels の型は、
IOArray Point Color ですよね。一方、

  newListArray  :: (MArray a e m, Ix i) => (i,i) -> [e] -> m (a i e)

なので、定義の右辺 
newListArray (bounds pixels) [lowpass p | p <- indices pixels] の型は
 m (IOArray Point Color) ですよね。

左辺の型 IOArray Point Color
右辺の型 m (IOArray Point Color)

これでは型が合わないですよね。ですから、以下のエラーになるわけです。
というかエラーメッセージそのまんまですが。。。

> エラー
> 
> C:/develop/ImageViewer.hs:138:
>      Couldn't match `Color' against `a i e'
>          Expected type: IOArray Point Color
>          Inferred type: IOArray Point (a i e)
>      In the application `newListArray (bounds pixels)
>                                       ([lowpass p | p <- indices pixels])'
>      In the definition of `lowpassFilter':

この部分だけで、単に型を合せて、型チェックを黙らせるだけなら簡単に
できますけど、それが正しいかどうかは、shelarcy さんの意図を正確に理解
できていないのでわかりません。

--nobsun

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/