我使用 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也没有帮助我,但也许有更简洁的方法来做我想做的事情?
答案 0 :(得分:2)
您尝试的几乎是正确的,但在模式匹配记录时只需要一个冒号:
instance showCity :: Show City where
show (City { name: CityName cn }) = "City(" <> cn <> ")"
双冒号仅用于注释类型,值级别的东西总是使用单个冒号。