のインスタンスであるとき、エラー「『ショー』機能を見つけることができません」:debugFunction getDebugTree
パラメータは、次のエラーがトリガされたショー
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Eq, Show)
getDebugTree :: Tree Int
getDebugTree = (Node 1 (Empty) (Node 2 Empty Empty))
debugFunction :: Show a => a -> Tree a -> Bool
debugFunction _ _ = True
を実行しているとき、私が読んだ
ERROR - Cannot find "show" function for:
*** Expression : debugFunction getDebugTree
*** Of type : Tree (Tree Int) -> Bool
ことreverse []
ERROR: Cannot find "show" function for: * expression : reverse [] * of type : [a]
The top-level system for Hugs can only print values which belong to a type which can be shown, that is a type which belongs to the Show class. Now, the list type is an instance of Show, so what is wrong with reverse [] (which evaluates to [])? The problem is that the type of [] is polymorphic: [] :: [a] for all a. Not knowing a Hugs refuses to print a value of type [a]. Note that this behaviour applies to all polymorphic values. Given the definition
data Tree a = Empty | Node (Tree a) a (Tree a)
we have, on evaluating
Empty
the error message
ERROR: Cannot find "show" function for: * expression : Empty * of type : Tree a
Functions can be shown, but not very helpfully; printing any function results in
<< function>>
私が知っている限り、ハグスはaを知らないので、それを印刷することを拒否します(ブールを印刷していますが?)だから私はショーのインスタンスにしようとしましたが、まだ動作しません、ここで何が問題なのですか?
Ahh、ありがとう、私はまだHaskellに慣れています。 – Aeron
@Aeron GHCiは、しばしばより良いエラーを生成します.HugsはもはやGHCの間に開発されていません。確かに、GHCiエラーには考えられる原因が含まれています:「(おそらく十分な引数に関数を適用していないのでしょうか?) – chi