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