Je suis nouveau à Haskell, alors j'essaie de comprendre comment faire des travers d'arbres.
Voici l'exemple de la société (avec un léger changement) que j'ai vu dans plusieurs papiers p>
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
3 Réponses :
Vous devrez commencer par un tutoriel SYB, P>
Les principales fonctions traversées sont: p>
Jouez avec ceux qui ont un sens pour l'API, et vous allez y travailler. P>
Les génériques SYB sont un peu plus qu'un exercice débutant haskell cependant. P>
Pas trop familier avec SYB, je vais donc montrer un exemple en utilisant Uniplate à la place. L'exemple ne supprime que l'unité des employés à partir de son département ou de son groupe de réflexion, mais vous trouverez facilement facilement comment l'étendre pour faire ce que vous voulez.
> 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)) []]
Le tutoriel à cs.uu.nl semble avoir disparu. J'ai eu du mal pendant cela, ce qui vous permet de peigner sur des papiers, puis a écrit ce tutoriel . J'espère que vous le trouverez utile. P>