> 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/