1

如果您有数据类型

data Something = foo Integer 
               | bar Bool

无论如何我定义了“getter”来解开Something类型以获得Integer或Bool?现在它就像 (foo Integer) 和 (bar Bool)。我只想要整数或布尔值。

4

1 回答 1

7

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

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,但很多时候这最终会涉及更多的样板。

于 2016-11-28T06:11:50.933 回答