我已經開始了這個新的問題,因爲它成爲我上一個問題的後續。在Haskell中使用數據類型
如果我有一個由類似構造的兩種數據類型:
data A = X | Y | Z
data B = X | Y
有沒有辦法,我能以某種方式代表此爲:
data A = C | Z
data B = C
data C = X | Y
,如果你能看到我在做什麼 - 我正在嘗試將X |分組Y轉換爲一種數據類型,然後可以被多種其他數據類型使用。我似乎無法讓編譯器允許這個,或者如果它,我不能模式匹配對X或Y,只有C?
我得到錯誤消息,C已被多次聲明。
我以爲我可以使用類型,但他們不允許多種類型。
編輯
即使我聲明很長的路要走(如下圖所示),它仍然不會編譯,說X和Y有多個聲明:
data A = X | Y | Z
data B = X | Y
什麼你問的是A的'亞型'。它不會用關鍵字'data'聲明,它會創建一個新的類型,與之前的現有類型不相交。我不認爲Haskell具有任何這樣的功能,但是我沒有任何Haskell擴展。 – Gilles
@Gilles:不,Haskell沒有任何亞型多態性。它只有參數多態性,並且通過類型類來實現ad-hoc多態。你可以得到的最接近的東西是存在型,但這幾乎是,但不完全是完全不同的東西。 –
我會把這個作爲答案,但是因爲它不是很完美。你可以通過聲明一個類型類來接近你想要的東西,然後你需要這些「常見的東西」所需的操作。這是一種非常常見的方式來解決(解決此問題的一個版本)的問題。 –