2013-10-10 3 views
5

я должен работать с кодом для присвоения, которое включает в себя следующую структуру данных:Haskell: Как использовать эту структуру данных

data Rose a = a :> [Rose a] 

Однако, я понятия не имею, как работать с этой структурой данных, например, : как я могу создать его экземпляр и как я мог бы пропустить его?

Если бы кто-нибудь мог мне помочь.

ответ

6

Конструктор данных для этого типа: (:>), и это тип (:>) :: a -> [Rose a] -> Rose a. Вы можете построить значения с ним, как

> 1 :> [] :: Rose [Int] 
1 :> [] 
> 1 :> [2 :> [], 3 :> [1 :> []]] :: Rose [Int] 
1 :> [2 :> [], 3 :> [1 :> []]] 

Это функционально эквивалентно

data Tree a = Node a [Tree a] 

с разными именами, т.е. Tree <=> Rose и Node <=> :>

Если вы хотели Functor экземпляр для него, вы бы do

instance Functor (Rose a) where 
    -- fmap :: (a -> b) -> Rose a -> Rose b 
    fmap f (a :> rest) = (f a) :> (map (fmap f) rest) 
+1

Спасибо, что ответил m y вопросы отлично. – Skyfe

+1

Или просто «вывести Functor» с расширением DeriveFunctor enabled :) – jozefg

+1

'(:>)' Что это за тип данных? Можете ли вы указать на это ссылку? (Я вижу это в первый раз.) – Sibi

Смежные вопросы