gpt4 book ai didi

haskell - 在 Haskell 中使数据类型成为 Show 的实例

转载 作者:行者123 更新时间:2023-12-04 01:21:42 25 4
gpt4 key购买 nike

我需要将以下数据类型设为 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” 实用程序,以便弄清楚如何扩展它?” (假设我必须先定义它......)

最佳答案

你必须这样开始:

data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a

instance (Show a, Show b) => Show (Tree a b) where
show (Leaf x) = show x
show (Branch p l r) = ???

为了 show一个 Tree a b你必须首先能够 show a s 和 b s。这就是 (Show a, Show b) =>部分确实如此,它指定了您的实例工作所需的先决条件。

关于haskell - 在 Haskell 中使数据类型成为 Show 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com