我需要将以下数据类型设为以下数据类型的实例Show
:
data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a
我对此很陌生,但首先,我将此声明解释为
“我们创建了一个新类型,称为 Tree,它使用类型 a 和 b 进行参数化。一棵树可以是以下两种情况之一:一个持有 b 类型数据的分支,再加上两棵树,或者一个持有a 类型的数据项。”
现在,我需要找到一种方法来很好地“显示”它(嵌套分支等),而不使用deriving
. 到目前为止,我只在模块 Main 中编写函数并在解释器窗口中加载/播放它们,所以我之前实际上并没有用构造函数等做过事情。尽管如此,我想我可以从在我的文件中声明树数据类型开始,如问题开头所示,然后从那里开始。
当我搞砸“显示”但没有取得多大成功时,我想也许我需要定义树的一个小组件以及如何首先“显示”它,然后再尝试使用整个树:
data Leaf a = Leaf a
instance Show (Leaf a) where
show (Leaf a) = ???
我在???中尝试了很多东西 点,例如“a”,只有 a 本身,putStrLn 等,但是当我说类似的话时,没有一个会打印出 a 的值
>show (Leaf 3)
事实上,我在很多情况下都遇到过这种情况,这可能意味着我没有正确定位:
Ambiguous occurrence `show'
It could refer to either `Main.show', defined at a2.hs:125:1
or `Prelude.show',
imported from `Prelude' at a2.hs:2:8-11
(and originally defined in `GHC.Show')
...我通过调用“Main.show”来解决这个问题,这当然不起作用。
我想问题是,我该去哪里处理这一切……或者只是,“我怎样才能修复 Leaf “Show” 实用程序,以便弄清楚如何扩展它?” (假设我必须先定义它......)