我有一個模塊A和B,它們都輸出Event
類型。模塊C定義了模塊A的Event
的同義詞類型,將其稱爲InputEvent
。我可以在不使用ViewPatterns GHC擴展的情況下導入類型同義詞的數據構造函數嗎?
我再消耗模塊d兩個模塊B和模塊C:
module D where
import B (Event)
import C (InputEvent)
但是,如果我嘗試導入InputEvent
的類型構造器(比方說,MakeEvent
),我得到的錯誤:
Module
‘C’
does not export
‘InputEvent(MakeEvent)’
這可以通過使用ViewPatterns GHC延伸和從模塊C導出的別名MakeEvent解決:
makeEvent = MakeEvent
但是,有沒有一種不使用ViewPatterns擴展來導入MakeEvent數據構造函數的方法?
類型同義詞沒有構造函數,所以自然導入類型同義詞的構造函數將失敗。從導入它們的模塊導入構造函數:'import {B/C}(Event(MakeEvent))'。模式syns在這裏並沒有真正的幫助 - 'MakeEvent'構造函數會與'MakeEvent'模式衝突,所以你必須將它們導入合格。此外,您不需要任何這樣的別名 - 只需從模塊「C」重新導出'MakeEvent'即可。 – user2407038
相關:http://stackoverflow.com/questions/35616041/can-i-export-constructors-along-with-a-type-alias –