我需要在一个作业中使用代码,该代码包含以下数据结构:
data Rose a = a :> [Rose a]
然而,我不知道如何使用这个数据结构,例如:如何创建一个它的实例以及如何循环遍历它?
如果有人能帮助我解决这个问题。
我需要在一个作业中使用代码,该代码包含以下数据结构:
data Rose a = a :> [Rose a]
然而,我不知道如何使用这个数据结构,例如:如何创建一个它的实例以及如何循环遍历它?
如果有人能帮助我解决这个问题。
(:>)
,它的类型是(:>) :: a -> [Rose a] -> Rose a
。你可以像下面这样使用它来构造值。> 1 :> [] :: Rose [Int]
1 :> []
> 1 :> [2 :> [], 3 :> [1 :> []]] :: Rose [Int]
1 :> [2 :> [], 3 :> [1 :> []]]
它在功能上等同于
data Tree a = Node a [Tree a]
使用不同的名称,即Tree <=> Rose
和Node <=> :>
如果您想要一个Functor
实例,您需要执行以下操作:
instance Functor (Rose a) where
-- fmap :: (a -> b) -> Rose a -> Rose b
fmap f (a :> rest) = (f a) :> (map (fmap f) rest)
Rose a
的构造器。 - bheklilr