나는 하스켈 컴파일러를 약간 작성하고 있으며 가능한 한 많은 하스켈 2010을 구현하고 싶다. 내 컴파일러는 모듈을 구문 분석 할 수 있지만 모듈을 프로그램에 완료하는 것은 쉬운 일이 아닌 것처럼 보입니다. 나는 까다로운,하지만 어쩌면 유효, 하스켈 모듈의 예 만들어 : 여기edge case의 해싱 모듈의 수입과 수출
module F(G.x) where
import F as G
x = 2
모듈 F
수출 G.x
,하지만 G.x
는 F.x
와 같은, 그래서 모듈은 F
수출 x
경우에 한해, 그것은 수출 x
. 이 예에서
module A(a) where
import B(a)
a = 2
module B(a) where
import A(a)
는 컴파일러가
B
에서 수입
a
가 선언 된
a = 2
같은 경우 확인하는 모듈
A
의 수출하지만,
B
수출
a
경우에 한해,
A
수출
a
를 해결합니다. 모듈
A
를 해결하는 동안
module A(f) where
import B(f)
module B(f) where
import A(f)
는 컴파일러 may've는 A
수출 f
는, 따라서 B
이 A(f)
를 가져 오기 및 내보내기 f
수 있다는 것을 의미, B
에서 수입 f
이 존재한다고 가정. 유일한 문제는 아무데도 정의 된 f
가 없다는 것입니다. 여기
module A(module X) where
import A as X
import B as X
import C as X
a = 2
module B(module C, C.b) where
import C
b = 3
module C(module C)
import B as C
c = 4
는 module
수출은 수출 목록은 서로 그 자체에 의존 유발.
이러한 모든 예제는 하스켈 2010 사양에 정의 된대로 유효한 하스켈이어야합니다.
하스켈 모듈을 정확하고 완벽하게 구현하는 방법이 있는지 알고 싶습니다.
모듈은 단지 (단순) 변수 바인딩import
들 (아마도
as
또는
qualified
)와, 가능 정규화 변수 수출 목록
module ...
약어를 포함한다고 가정. 각 모듈
- 컴퓨팅 한정된리스트 :이 알고리즘은 할 수 있어야
와우, 고맙습니다. 실제로이 문제를 목표로하는 서류와 라이브러리가 있습니다. :) –