Haskell解包数据

Uma*_*ooq 1 haskell types unwrap

如果您有数据类型

data Something = foo Integer 
               | bar Bool
Run Code Online (Sandbox Code Playgroud)

无论如何我有定义"getters"打开Something类型以获得Integer或Bool?现在它就像(foo Integer)和(bar Bool).我只想要Integer或Boolean值.

Dav*_*vid 7

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

data Something = Foo Integer
               | Bar Bool
Run Code Online (Sandbox Code Playgroud)

您要求的是模式匹配的确切含义.如果您有一个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"
Run Code Online (Sandbox Code Playgroud)

这就是你通常如何处理这个问题,因为如果用"错误的"构造函数构造它,那么这种数据类型的任何类型的getter都会抛出错误,这样你就可以处理这种情况了.你可以用类似的东西做一个安全的吸气剂Maybe,但很多时候这最终会涉及更多的样板.