如果您有数据类型
data Something = foo Integer
| bar Bool
无论如何我定义了“getter”来解开Something类型以获得Integer或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"
这就是您通常处理此问题的方式,因为这种数据类型的任何类型的 getter 如果使用“错误”构造函数构造,都会引发错误,这允许您处理这种情况。你可以用类似的东西做一个安全的吸气剂Maybe
,但很多时候这最终会涉及更多的样板。