簡體   English   中英

Haskell可選類型參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM