>    WinHugs で
>      Prelude> Nothing
> すると
>      ERROR - Cannot find "show" function for:
>      *** Expression : Nothing
>      *** Of type    : Maybe a
> というエラーになります。

これは表示ができないというエラーです。
Haskell では評価すると必ず値が返ってきますが、
インタープリタではこの値を文字列に変換して表示します。

このとき、その値から文字列に変換するメソッドが必要になります。
これが show です。これは、show は Show クラスのいわば仮想メソッドです。

上のは処理する型と結びついた具体的な show が見付けられないというエラーです。
具体的な show は Maybe a の a が決まれば、決ります。
ところが、Nothing だけでは、具体的な 型が特定できませんので、
具体的にどの show を呼んでいいのかわからなくて、上のようなエラーがでます。

というわけで、具体的な型を与えれば表示してくれます。

Prelude> Nothing :: Maybe ()
Nothing
Prelude> Nothing :: Maybe Int
Nothing

>      maybeToList            :: Maybe a -> [a]
>      maybeToList Nothing    =  []
>      maybeToList (Just a)   =  [a]
>      Main> maybeToList Nothing
> すると
>      ERROR - Cannot find "show" function for:
>      *** Expression : maybeToList Nothing
>      *** Of type    : [a]
> というエラーになります。

これも理屈は同じです。
この二つはプログラムが間違っているというのではなく、
表示ができないということです。
 
>      isJust                 :: Maybe a -> Bool
>      isJust (Just a)        =  True
>      isJust Nothing         =  False
>      Main> isJust Nothing
> ではエラーにならず False が返ってきます。

これは Bool が Show クラスのインスタンスだからです。

>    それと maybeToList や isJust などは Prelude に入ってないん
> でしょうか。

maybeToList や isJust は標準ライブラリの Maybe モジュールにはいっています。
import Maybe としておけば、使えます。

--nobsun

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