인터페이스 모듈은, 모듈이 export하고 싶은 시그니처들을 전부 타입으로 가지고 있다.


2. 구체화된 모듈들을 만든다.


해당 모듈은

내부 구성물들을 전부 구현을 한 후,

그것을 인터페이스 모듈에서 정의한 타입의 데이터로 담아서 반환한다.



3. 해당 인터페이스를 사용하는 쪽에서는 항상 인터페이스타입의 데이터에서 getMethod를 하여 사용한다.


4. 그렇다면, 해당 인터페이스 타입의 데이터는 누가 주입해주는가? 항상 인자로 받아오는가??

4-1. 전역변수로 만드는 방법. -> 컴파일타임에 전역변수로 해당 인터페이스를 정의해야한다.

 이거는 템플릿 하스켈로 정의가 가능한 부분.



예를들면, 각 모듈은 자신의 타입을 가지고있을거고


템플릿 하스켈을 통해 그 중 하나를 고르면 된다. 이거는 가능!




그러면 항상 해당 변수를 통해서 모듈을 가져오고, 모듈에서 메소드를 꺼내서 쓰면 완성!!




템플릿 하스켈이 컴파일타임에 에러체크를 해주던걸로 기억하는데

빈이 선언이 안되어있으면 에러를 내뱉게 됨.




결국 템플릿 하스켈만 만들고


인터페이스 모듈을 만들고 메소드를 머금은 타입을 생성하고

구체화된 모듈들을 만들어서 해당 타입의 데이터를 만들어내고

그중 하나를 전역변수로 만들어서


나머지 코드에서는 전역변수를 통해 메소드를 접근하게 하면...



전역변수가 아니라 인자로 전달받는 구조는??



불가능. 메인펑션으로부터 빈저장소를 만들어야하고

모든 함수는 빈저장소를 인자로 받아야하는데... 모르겠다 이건 생각 안할래