如果我们将类型的人定义为:

--datatype in record syntax
data Person = Male { firstName :: String, lastName :: String } |
              Female { firstName :: String, lastName :: String }

可以这样:
flipNames :: Person -> Person
flipNames p@(Male{}) = Male (lastName p) (firstName p)
flipNames p@(Female{}) = Female (lastName p) (firstName p)

是作为 flipNames 的一个定义写的吗?我们可以以某种方式捕获使用的构造函数,并使用不同的参数重用它吗?
就像是:
flipNames (constructor fname lname) = c lname fname

最佳答案

在这种情况下,您可以这样操作:

flipNames :: Person -> Person
flipNames p = p { firstName = lastName p , lastName = firstName p }

但是,这仅是有效的,因为MaleFemale的记录选择器是相同的。没有通用的抽象可以捕获没有参数的构造函数。

关于haskell - 是否可以使用不同的参数集捕获并重用构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21173862/

10-09 05:25