저는 새로운 hase입니다. 난 그냥 내가 오류 여기가 제공haskell의 데이터 유형을 알고 싶습니다.
data NestedList a=Elem a | List [NestedList a] deriving Show
append::NestedList a->NestedList a->Either String (NestedList a)
append (Elem x) (Elem y) = Right $ List [Elem x, Elem y]
append (_) (Elem _)=Left "Elements are not allowed"
append (Elem _) (_)=Left "Elements are not allowed"
append (List a) (List b)=List(a++b)`
을 무슨 일이 일어나고 있는지 주위에 내 머리를 정리 할 수
는 List' In the expression: List (a ++ b) In an equation for
APPEND의 호출의 반환 유형에 유형 Either String (NestedList a)' with actual type
NestedList는 ' 예상과 일치 할 수 없습니다 ': append (List a) (List b) = 목록 (a ++ b).
그러나 data NestedList a=Elem a | List [NestedList a]
그것은 NestedList
유형의 것을 의미하지 않는다 Elem
또는 List
of NestedList
및 반환 할 수 있습니다 추가
append::NestedList a->NestedList a->Either String (NestedList a)
중 하나
String
또는
NestedList
. 지금 내가
List(a++b)
할 때 나는
List
를 돌려주고있다. 그렇지?
내 다른 함수는 입력 매개 변수도 NestedList
하지만 List(x:xs)
또한 단지 List
입니다 GHC는 flatten
(List(x:xs))
으로 괜찮 동안
flatten ::NestedList a->[a]
flatten (Elem x)=[x]
flatten (List(x:xs))=flatten(x)++flatten(List xs)
--flatten NestedList (x:xs)=flatten(x)++flatten(List xs)
flatten(List [])=[]
잘 작동 평평. 왜 불평하지 않니? 어떤 입력? Either a b
를 반환하기 위해
: 당신은 제대로
Left "...."
및Right
모두 그러나 마지막 패턴을 사용했다. 여전히 NestedList를 반환 할 수 있습니다. – augustss