2010-07-09 2 views
5

haskell-src-exts 패키지에는 하스켈 AST를 출력하기위한 기능이 있습니다. 내가하고 싶은 것은 특정 생성자에 대한 동작을 변경하는 것입니다. 제 경우에는 SCC pragma가 인쇄되는 방식입니다. 다른 모든 것은 기본 방법으로 인쇄해야하며 SCC 만 다르게 처리됩니다. source file을 복사하지 않고 편집 할 수 있습니까? 지금 제가하고있는 일은 무엇입니까?haskell-src-exts에서 예쁜 프린터 수정

답변

2

음, 라이브러리는 Pretty에 대한 유형 클래스를 사용하여 올바르게 한 가지를 수행했습니다. 문제는 다르게 인쇄하려는 생성자에 대해 다른 인스턴스를 선택하는 방법입니다. 이상적으로는 신경 쓰는 AST 노드를 newtype으로 바꾸면 AST로 대체 할 수 있습니다.

이제 문제는 라이브러리에서 내 보낸 하스켈 AST의 유형 구조가 고정되어 있다는 것입니다. 예를 들어 two-level types을 사용하면 트리의 일부에 대해 새 유형을 사용할 수 있습니다. 따라서 AST 유형을 유형을 변경하려는 노드까지 재정의해야합니다.

+0

어떻게이 기술을 사용하여 AST의 노드를 대체 할 수 있습니까? 내가 용어 (Term)의 Arith (Arith)와 커스텀 타입의 MyArith (MyArith)를 (인용 된 논문의 정의에서) 바꾸려고한다. '용어'는 'Arith'를 사용하기위한 정의로 고정되어 있지 않습니까? –