[英]Haskell optional type parameter
在haskell中,如何定義可選的type參數:
data Car a b c = Car { company :: a
, model :: b
, year :: c
}
-- I want to return this type if `c` is not provided
data Car a b = Car { company :: a
, model :: b
}
在上面,我想有一個可選的類型c
,它基於是否提供了返回略有不同的類型。 我該怎么做呢? 我這樣做是完全錯誤的嗎?
根據您的要求,我熟悉不同的方法。 但是首先,我不清楚您是否希望對這些類型進行參數化。 即我懷疑您真正想要的是這樣的:
data Car = Car { company :: Company
, model :: String
, year :: Int
}
特別是,您似乎不太可能需要對該year
單獨處理。 如果是這樣,那么您的問題的答案(如何使年份可選:
data Car = Car { company :: Company
, model :: String
, year :: Maybe Int -- N.B. Maybe
}
如果您真的想擁有一個可選的參數化類型,則可以執行以下操作:
data Foo a = Foo Int Char a
然后,當您希望將其視為“沒有最后一個參數的Foo”時,可以將其用作Foo ()
。 如果需要,可以進一步在其周圍制作新包裝。
newtype FooWithoutA = FooWithoutA (Foo ())
由於單位類型()
僅具有一個值,因此表明該字段沒有任何意義。
另外:您可能也有興趣閱讀http://chris-taylor.github.io/blog/2013/02/10/the-algebra-of-algebraic-data-types/ ,這將使您了解為何有所不同除其他見解外,構建數據的方式是等效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.