nobsun です。

> やっと、Haskellの本を一冊読み終えて、さて自分のプログラムを
> 作ってみようと思って気づいたんですが、デバッグをどうやったらいいか
> がわからない。

残念ながら、Haskell でのデバッグは結構むずかしいです。
とくにコンパイルは通るのに、意図していない動作をするときは難しいです。
 
> 特にMonadを使って再帰的な処理をしているときは、ここにバインド
> されているのを表示したい、などと思うのですが、他の言語みたいに
> print文を埋め込む、というのができそうにありません。

hugs をつかっているのなら、import Trace すると、trace :: String -> a -> a
という反則技関数が使えます。^^;

また、私は使ったことがありませんが、QuickCheck というフレームワークが
使えるかもしれません。
 
> また、調子にのって関数をたくさん書いてて、いざ実行しようと思ったら
> 型エラー。で、型を表示させようと思って:typeをしようと思っても、エラー
> のため表示できない。

まず、型宣言を書きましょう。自分の意図した型と、処理系が型推論した型を
くらべて、コードを修正しましょう。

> なんてことがありました。僕の作り方が悪いのかもしれませんが、どなたか
> どう解決しているのかお教え願えませんでしょうか。処理系はhugsです。

たとえば、どんなコードですか?

--nobsun

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