2009-04-19 8 views
1

À quoi l'instance Foldable de ce type de données ressemblerait-elle?Définition d'une instance pliable apparemment simple

data X t = X t [X t] 

J'ai essayé ceci:

instance Foldable X where 
    foldMap f (X x xs) = f x `mappend` foldMap f xs 

mais nous avons eu cette erreur:

Occurs check: cannot construct the infinite type: a = X a 
When generalising the type(s) for `foldMap' 
In the instance declaration for `Foldable X' 

Répondre

6

xs est une liste d'articles et foldMap doit être appliqué aux éléments individuels, et non la liste lui-même. Pour ce faire avec map donne une liste de résultats qui peuvent être combinés avec mconcat:

instance Foldable X where 
    foldMap f (X x xs) = f x `mappend` mconcat (map (foldMap f) xs) 
Questions connexes