如何巧妙地解构嵌入记录的newtypes?

时间:2016-10-03 15:34:15

标签: pattern-matching purescript newtype

我使用 newtype 作为记录的字段,并在" parent"上使用模式匹配。用于提取嵌套值的类型很麻烦:

newtype CityName = CityName String
newtype City = City {
  name :: CityName
}
instance showCity :: Show City where
  show (City { name }) = case name of (CityName cn) -> "City(" <> cn <> ")"

我可以解构父母&#34;类型,但然后我使用另一个模式匹配来提取包装的字符串 - 即使 newtype 只有一个数据构造函数。只用一种模式解构整个类型会更方便。

这可能吗?如果是这样,我无法正确使用语法。我试过像show (City { name :: (CityName cn) }) = cn这样的东西,但它给了我语法错误。 PureScript by Example也没有帮助我,但也许有更简洁的方法来做我想做的事情?

1 个答案:

答案 0 :(得分:2)

您尝试的几乎是正确的,但在模式匹配记录时只需要一个冒号:

instance showCity :: Show City where
  show (City { name: CityName cn }) = "City(" <> cn <> ")"

双冒号仅用于注释类型,值级别的东西总是使用单个冒号。