繁体   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