2013-10-10 2 views
5

나는 다음과 같은 데이터 구조를 포함하는 할당 코드와 함께 일해야 : 그러나하스켈이 데이터 구조를 사용하는 방법

data Rose a = a :> [Rose a] 

, 내가 어떻게 데이터 구조, 예를 들어 작동하는 아무 생각을 : 어떻게 그것의 인스턴스를 만들 수 있습니까? 어떻게 루프를 통과 할 수 있습니까?

누구든지 나를 도와 줄 수 있다면.

답변

6

이 데이터 형식의 생성자는 (:>)이고 형식은 (:>) :: a -> [Rose a] -> Rose a입니다. 당신은 당신이 좋겠, 당신은 그것을 위해 Functor 인스턴스를 원한다면 그것은 즉, 다른 이름으로

data Tree a = Node a [Tree a] 

, Tree <=> RoseNode <=> :>

기능적으로 동일

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

처럼 그것으로 값을 구성 할 수 있습니다 do

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

고맙습니다. y는 완벽하게 질문합니다. – Skyfe

+1

또는 DeriveFunctor 확장자가 활성화 된'Functor'를 생성했습니다. – jozefg

+1

'(:>)'이 데이터 유형은 무엇입니까? 이것에 대한 몇 가지 링크를 지적 해 주시겠습니까? (나는 이것을 처음으로 보았습니다.) – Sibi

관련 문제