문제

HTML 글꼴 태그는 다음을 수행합니다.

data Color = HexColor Int | RGBColor Int Int Int | ColorString String deriving Show
data FontAttribute = Size Int | Face String | FontColor Color deriving Show
data Font = Font [FontAttribute] deriving Show
.

나는 하나를 그렇게 생성한다 :

Font [Size 23,Face "Arial",Color (RGBColor 240 23 43)]
.

내 관심사는 type fontattribute가있는 FontColor data / value 생성자가 색상 유형을 인수로 요구한다는 것입니다.즉, 색상은 모든 종류의 태그에 대한 일반적인 유형 속성이며 특정 태그는 속성의 특정 하위 집합 (이 경우 Font 트리 티버가 있으며 크기, 얼굴 또는 FontColor가 될 수 있음)입니다.이를 표현하는 것이 더 명확한 방법이거나 구현 사운드입니까?

도움이 되었습니까?

해결책

색상은 속성이 아닌 유형입니다.유형 시스템에는 색상이 fontattribute와의 특별한 관계가 있음을 나타내는 것은 아무것도 없습니다.Fontattribute 데이터 유형을 정의 할 때 발생하는 모든 것은 다음 유형의 서명을 가진 일반 함수 인 fontColor라는 생성자를 만듭니다.

FontColor :: Color -> FontAttribute
.

그래서 링크라는 새 유형을 선언 한 경우 :

data LinkAttrubute = LinkColor Color | ...
.

다음 색상은 LinkAttribute에도 저장 될 수 있습니다.생성자는 해당 데이터 유형 만 독점적 인 관계를 나타내지 않습니다.모든 FontatTribute 데이터 유형은 색상이 포함될 수 있다는 것입니다.

Haskell은 객체의 내장 개념이 없기 때문에 속성의 내장 개념이 없었습니다.그러나 데이터 렌즈 (또는 FCLabels) 패키지에서 렌즈 유형을 사용하여 속성을 모델링 할 수 있습니다.나는 당신에게 패키지를 연결시킬 것이지만, 나는 내 휴대 전화에있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top