2014-03-13 6 views
2

내 프로그램을 제외하고 모두 사용되는 대수 데이터 형식이 있습니다. 그 유형의 모든 구조에 간단한 문자열로 주석을 달 필요가 있다는 점을 깨달았습니다.하스켈에서 ADT의 선택적 필드를 시뮬레이션하는 방법은 무엇입니까?

자주 사용하는 유형에 필드를 추가하는 데 대한 설명을하지 않으려합니다. 특히 내 프로그램에서 아주 멀리까지이 주석에 의미있는 가치가 없기 때문에 사소한 변경을 위해 코드 라인을 리팩터링하는 것이 지나치게 보인다.

또한 형식이 꽤 복잡하기 때문에 형식을 복제하고 약간 다른 버전을 만드는 것은 바보 같습니다.

이것은 하스켈의 단점입니까, 아니면이 문제를 해결할 올바른 방법이없는 것입니까? 나는 그것이 후자라고 가정하지만 타입 생성자에 대한 선택적 매개 변수와 비슷한 것을 찾을 수 없다.

+5

일반적으로 이것을 피하는 방법은 실제 생성자를 사용하는 것이 아니라 함수를 사용하여 형식을 생성하는 것입니다. 그런 다음 추가 인수를 취하는 함수'createStructureAnnotated'를 추가하고 주석이없는 버전을 빈 문자열 또는 기타에 넣는 'createStructure' 함수를 수정하면됩니다. 이미 가지고있는 수천 줄의 코드를 손상시키지 않습니다. 필자의 생각에 따라 데이터 구조를 어느 정도 변경할 수 있습니다. – bheklilr

답변

1

"하스켈의 약점"을 선언 할 때까지는 가지 않을 것입니다. ADT (특히 하스켈이 아닌)를 다룰 때 고려해야 할 것과 비슷합니다.

각 프로그램은 "엔터티"와 "작업"으로 구성됩니다. 귀하의 문제는 엔티티 (하스켈의 ADT)를 수정해야한다는 것입니다.

OOP 언어에서는 솔루션을 간단하게 입력 할 수 있습니다. 그러나 기존 클래스에서 메소드의 시그니처를 변경하기로 결정한 경우 전체 코드베이스를 검토하고 손상을 처리 할 수밖에 없습니다.

함수 언어에서 함수는 "저렴"합니다. 각 함수는 ADT와 독립적이며 리팩토링은 종종 간단합니다. OOP 언어의 약점이 있습니까? 아니요 - 기존의 "액션"(기능적 언어에서는 쉽습니다)을 수정하는 편이성과 "엔티티"(OOP 언어에서는 쉬운)를 손쉽게 수정하는 것 사이의 단점 일뿐입니다.

그리고 실제 노트에

:

  1. ADT 디자인은 매우 비쌀 수 있습니다 변경 이후 매우 중요합니다.

  2. @ bheklilr의 충고는 귀중합니다.