6
使用了一些擴展變量數,我可以做這樣的事情:的構造方法的參數
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
type family TF (a :: Bool) where
TF 'True = Int
TF 'False = Double
data D a where
D :: TF a -> D a
通知構造D
可以以兩種方式工作。或者:
D :: Int -> D 'True
或
D :: Double -> D 'False
地使用這種模式,我可以徹底改變的參數取決於它的類型構造函數,而重新使用它的名字。
但是,我也想要參數的數量取決於它的名稱。
我知道我可以用()
或Void
替換一些參數,但我寧願將它們全部刪除。
有沒有辦法做到這一點?
我不認爲你可以用* constructor *來做這個,因爲最終的codomain必須在語法上是你定義的數據類型。但是,如果你創建一個構造'D'的函數,我認爲你可以通過使共域爲一個類型的家族 – luqui
這看起來好像會使得類型推斷更加困難,而且收益甚微。您可以使用'D :: F a - > D a',其中'F'根據'a'返回不同長度的元組類型。它需要更多的拳擊,但沒有那麼多。 – chi
你爲什麼想這樣做? –