2010-03-06 65 views
7

我是Haskell的新手,所以我想弄清楚如何做樹遍歷。如何使用廢舊鍋爐板轉換樹?

這裏是我在幾篇論文

data Company = C [Dept]    deriving (Eq, Show, Typeable, Data) 
data Dept  = D Name Manager [Unit] deriving (Eq, Show, Typeable, Data) 
data ThinkTank= TK Name [Unit]   deriving (Eq, Show, Typeable, Data) 
data Unit  = PU Employee | DU Dept deriving (Eq, Show, Typeable, Data) 
data Employee = E Person Salary  deriving (Eq, Show, Typeable, Data) 
data Person = P Name Address   deriving (Eq, Show, Typeable, Data) 
data Salary = S Float    deriving (Eq, Show, Typeable, Data) 
type Manager = Employee 
type Name  = String 
type Address = String 

我想要做的是移動從那裏,他是某一個部門一個員工都看到了公司的例子(有輕微的變化)。這個人可能在一個部門或一個ThinkTank。

只要你在做一種類型,在SYB中做事似乎很容易,但我不知道如何處理多種數據類型。

回答

0

不太熟悉SYB,所以我會用uniplate來代替。這個例子只是將僱員單位從其部門或智庫中刪除,但你很容易就能很容易地找出如何擴展它來做你想做的事情。

> let jack = E (P "Jack" "The Road") (S 7) 
> import Data.Generics.Uniplate.Data 
> transformBi (filter (/= PU jack)) $ C [D "Operations" (E (P "Charles" "Seattle") (S 700000)) [PU jack]] 
C [D "Operations" (E (P "Charles" "Seattle") (S 700000.0)) []] 
6

cs.uu.nl的教程似​​乎已經消失。我努力了一會兒,梳理了論文,然後寫了this tutorial。希望你覺得它有用。