모듈 A와 B 모두 Event
유형을 내보내고 있습니다. 모듈 C는 모듈 A의 Event
에 대한 동의어를 정의하고이를 InputEvent
이라고합니다.ViewPatterns GHC 확장을 사용하지 않고 타입 동의어의 데이터 생성자를 가져올 수 있습니까?
내가 다음 모듈 D의 두 모듈 B와 모듈 C 소모 : 나는 InputEvent
의 타입 생성자를 (예를 들어, MakeEvent
)를 가져 오려고 할 경우, 그러나
module D where
import B (Event)
import C (InputEvent)
를, 나는 오류가 발생합니다 :
Module
‘C’
does not export
‘InputEvent(MakeEvent)’
이것은 ViewPatterns GHC 확장을 이용하여 C 모듈로부터 MakeEvent 별칭 수출 의해 해결 될 수있다 :
makeEvent = MakeEvent
그러나 ViewPatterns 확장명을 사용하지 않고 MakeEvent 데이터 생성자를 가져 오는 방법이 있습니까?
유형 동의어에는 생성자가 없으므로 자연스럽게 유형 동의어의 생성자를 가져 오지 못합니다. 모듈을 export하는 모듈로부터 생성자를 import한다 : import {B/C} (Event (MakeEvent))'. 패턴 syn은 실제로 여기서 도움이되지 않을 것입니다 -'MakeEvent' 생성자는'MakeEvent' 패턴과 충돌합니다. 따라서 당신은 그것들을 정규화 된 것으로 가져와야 할 것입니다. 게다가, 당신은 그런 별명을 필요로하지 않는다. 단순히 모듈'C'에서'MakeEvent'를 다시 내 보낸다. – user2407038
관련 : http://stackoverflow.com/questions/35616041/can-i-export-constructors-along-with-a-type-alias –