(show . toConstr $ x) 1) . universe
? В результате будет Map String Int
Не знаю, но тоже попробую, спасибо. Пока вот вариант выше (fmap (length &&& head) <<< groupBy (on (==) toConstr) <<< sort <<< toList $ yourTree) реконструирую по шагам, чтобы выяснить, что там происходит)
А не подскажете, откуда доставать unionWith и singleton ? Посмотрел в hoogle, но там много разных вариантов, часть требуют реализации Ord, например. А тут для типов в моей задачке реализованы только (Data, Eq, Show, Typeable) и некий аналог Show
Так типы немного не сходятся (с fromListWith тоже), вот так сошлись: map (unionWith (+) . (\x -> singleton (show . toConstr $ x) 1)) . universe Но возникает другая ошибка: Ambiguous type variable `a0' arising from a use of `toConstr' prevents the constraint `(Data a0)' from being solved. А почему? Я ведь и хочу toContr как раз, чтобы из любого a строка получалась. Потому что у меня там дерево, в котором N разных типов может быть. Допустим, нода типа T1 может быть сделана конструктором C1, который имеет три поля: C1 T1 T2 T3
Обсуждают сегодня