Haskell:如何使用这种数据结构

Sky*_*yfe 5 haskell data-structures

我必须使用包含以下数据结构的赋值的代码:

data Rose a =  a :> [Rose a]
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何使用这个数据结构,例如:我如何创建它的实例,我怎么可能循环一个?

如果有人能帮我解决这个问题.

bhe*_*ilr 6

这种数据类型的构造函数是(:>),它的类型是(:>) :: a -> [Rose a] -> Rose a.你可以用它来构造值

> 1 :> [] :: Rose [Int]
1 :> []
> 1 :> [2 :> [], 3 :> [1 :> []]] :: Rose [Int]
1 :> [2 :> [], 3 :> [1 :> []]]
Run Code Online (Sandbox Code Playgroud)

它在功能上等同于

data Tree a = Node a [Tree a]
Run Code Online (Sandbox Code Playgroud)

有不同的名字,即Tree <=> RoseNode <=> :>

如果你想要一个Functor实例,你就可以

instance Functor (Rose a) where
    -- fmap :: (a -> b) -> Rose a -> Rose b
    fmap f (a :> rest) = (f a) :> (map (fmap f) rest)
Run Code Online (Sandbox Code Playgroud)