Обобщенная функция Foldr для деревьев? - PullRequest
0 голосов
/ 13 февраля 2011

Как мне написать обобщенную функцию свёртки для общих деревьев Haskell?

data (Eq a, Show a) => Tree a = Void | Node a [Tree a]
    deriving (Eq, Show)

treefold :: (Eq a, Show a) => (a -> [b] -> b) ->  b -> Tree a -> b

Я застрял в определении первого аргумента ...

EDIT : как насчет более обобщенной версии, избегая использования списков? Подробнее здесь

1 Ответ

1 голос
/ 13 февраля 2011
data Tree a = Void | Node a [Tree a]
    deriving (Eq, Show)

Контекст экземпляра не обязателен;deriving будет делать все правильно (создавая instance (Eq a) => Eq (Tree a) и instance (Show a) => Show (Tree a)).

Ваша подпись типа выглядит просто отлично и является естественной для реализации..Traversable для аналогичного вдохновения.

...