하스켈에서 트리 데이터 타입을 정의했고 트리의 요소 수를 계산하는 연관된 'size'메소드를 정의했습니다. 나는이 기능을 사용하여 지정된 필드에 액세스 할 수 내가 (GHCi의 장난에 의해) 발견했습니다하스켈 함수에서 명명 된 필드에 접근하기
data Tree a = Empty
| Leaf {value::a}
| Node {left :: (Tree a), value :: a, right :: (Tree a)}
deriving (Eq, Ord, Show)
이 그러나 나는 다음과 같은 정의에로라는 이름의 필드를 사용하는 트리 데이터 유형을 업데이트 한 전 일 (왼쪽 n). 그러나이 함수를 사용하려고하면 오류가 발생합니다.
size :: Tree a -> Int
size Empty = 0
size (Leaf l) = 1
size (Node n) = size (left n) + 1 + size (right n)
GHCi는 단순히 "범위 내에 있지 않습니다 : 왼쪽"과 오른쪽에 해당하는 것입니다. 트리 정의는 Tree라는 모듈에 있고 크기 정의는 Main이라는 모듈에 있지만 이름이 지정되지 않은 필드에서는 Tree 데이터 유형의 변수에 액세스 할 때 범위에 문제가 없었습니다.
나는 모든 제안을 시도했지만 '범위에 포함되지 않음'오류가 발생합니다. GHCi에서 '왼쪽'과 '오른쪽'을 사용할 수는 있지만 내 메인 모듈에서는 사용할 수 없습니다. – benwad
모듈에서 이름을 내보내시겠습니까? (그 이름도 기능입니다). 모듈 코드에 "module TreeModule (Tree Node Leaf left right)"와 같은 것이 필요합니다. – 0xfe
감사합니다 - 코드에서 왼쪽, 오른쪽 및 값 선언을 생략했습니다. – benwad