Haskell:我如何定义我的函数可以作为参数的类型?以及如何在数据结构中访问未命名的变量?

Dr.*_*ing 0 haskell function

1)这是我的代码,find函数需要将(节点a)和类型(a)作为参数,但我的函数定义似乎不起作用,我做错了什么?我能找到的网上信息很少,所以感谢您的帮助!

2)当我的find函数实现时,我需要访问Node中的特定变量,我该怎么做?!?

-- int for comparisons
find :: (Node a) => Node a -> a -> Bool
find n s
| s == "asd" = True
| s /= "asd" = False

data Node a = Node a (Node a) (Node a)
| Empty

myTree = Node "parent" (Node "left" Empty Empty)
(Node "right" Empty Empty)
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误消息:

Type constructor `Node' used as a class
In the type `(Node a) => Node a -> a -> Bool'
In the type signature for `find':
find :: (Node a) => Node a -> a -> Bool
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

我显然还在学习这个,所以对解决方案的解释也会受到赞赏,谢谢!

Dar*_*rio 5

语法

Node a => ...
Run Code Online (Sandbox Code Playgroud)

这意味着它Node是一个类型类,但事实上,它只是一个普通的数据类型.

因此这个签名就足够了

find :: Node a -> a -> Bool
Run Code Online (Sandbox Code Playgroud)

例:

find (Node val left right) = ...
find Empty = ...
Run Code Online (Sandbox Code Playgroud)