Haskell 展开数据
Haskell unwrap data
如果你有数据类型
data Something = foo Integer
| bar Bool
我是否定义了 "getters" 来解包 Something 类型以获得 Integer 或 Bool?现在它就像 (foo Integer) 和 (bar Bool)。我只想要整数或布尔值。
嗯,首先你有一个错字:数据构造函数必须大写:
data Something = Foo Integer
| Bar Bool
你问的正是模式匹配的用途。如果您有一个名为 s
的 Something
值:
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,但很多时候这最终会涉及更多样板文件。
如果你有数据类型
data Something = foo Integer
| bar Bool
我是否定义了 "getters" 来解包 Something 类型以获得 Integer 或 Bool?现在它就像 (foo Integer) 和 (bar Bool)。我只想要整数或布尔值。
嗯,首先你有一个错字:数据构造函数必须大写:
data Something = Foo Integer
| Bar Bool
你问的正是模式匹配的用途。如果您有一个名为 s
的 Something
值:
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,但很多时候这最终会涉及更多样板文件。