Haskell 展开数据

Haskell unwrap data

如果你有数据类型

data Something = foo Integer 
               | bar Bool

我是否定义了 "getters" 来解包 Something 类型以获得 Integer 或 Bool?现在它就像 (foo Integer) 和 (bar Bool)。我只想要整数或布尔值。

嗯,首先你有一个错字:数据构造函数必须大写:

data Something = Foo Integer
               | Bar Bool

你问的正是模式匹配的用途。如果您有一个名为 sSomething 值:

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

这就是您通常处理此问题的方式,因为如果使用 "wrong" 构造函数构造此类数据类型的任何类型 getter 都会引发错误,这允许您来处理那个案子。您 可以 使用 Maybe 之类的东西制作保险箱 getter,但很多时候这最终会涉及更多样板文件。