2013-10-10 5 views
5

Ich habe für eine Zuordnung mit einem Code arbeiten, die folgenden Datenstruktur umfasst:Haskell: Wie diese Datenstruktur verwenden

data Rose a = a :> [Rose a] 

aber ich habe keine Ahnung, wie man mit dieser Datenstruktur arbeiten, zB : Wie erstelle ich eine Instanz davon und wie könnte ich eine Schleife durchlaufen?

Wenn mir jemand dabei helfen könnte.

Antwort

6

Der Konstruktor für diesen Datentyp ist (:>), und sein Typ ist (:>) :: a -> [Rose a] -> Rose a. Sie können wie

> 1 :> [] :: Rose [Int] 
1 :> [] 
> 1 :> [2 :> [], 3 :> [1 :> []]] :: Rose [Int] 
1 :> [2 :> [], 3 :> [1 :> []]] 

Werte mit ihm konstruieren Es funktionell gleichwertig ist

data Tree a = Node a [Tree a] 

mit unterschiedlichen Namen, dh Tree <=> Rose und Node <=> :>

Wenn Sie eine Functor Beispiel dafür wollte, würden Sie tun

instance Functor (Rose a) where 
    -- fmap :: (a -> b) -> Rose a -> Rose b 
    fmap f (a :> rest) = (f a) :> (map (fmap f) rest) 
+1

Vielen Dank, dass beantwortet m y Fragen perfekt. – Skyfe

+1

Oder einfach "Ableitung Functor" mit der DeriveFunctor-Erweiterung aktiviert :) – jozefg

+1

'(:>)' Was ist dieser Datentyp? Können Sie auf einen Link dafür hinweisen? (Ich sehe das zum ersten Mal.) – Sibi

Verwandte Themen