Haskell解开包装数据



如果您有数据类型

data Something = foo Integer 
               | bar Bool

无论如何,我是否定义了" getters",这些" getters"剥离了某些类型以获取整数或bool?现在就像(foo Integer)和(bar bool)。我只想要整数或布尔值。

好吧,首先您有一个错字:数据构造函数必须是大写:

data Something = Foo Integer
               | Bar Bool

您的要求是哪种模式匹配的目的。如果您的Something值称为s

case s of
  Foo f -> ... -- f is of type Integer in this "block"
  Bar b -> ... -- b is of type Bool in this "block"

这通常是您解决此问题的方式,因为如果使用"错误"的构造函数构建此类数据类型,任何类型的数据类型都会丢弃错误,这允许您处理该情况。您 can Maybe之类的东西做一个安全的获取器,但是很多时候,这最终都会涉及更多的样板。

最新更新