有没有干净的方式,以避免以下样板:安全记录字段查询
给定一个记录数据类型定义....
data Value = A{ name::String } | B{ name::String } | C{}
编写安全返回name
getName :: Value -> Maybe String
getName A{ name=x } = Just x
getName B{ name=x } = Just x
getName C{} = Nothing
功能
我知道你可以用模板Haskell做到这一点,我正在寻找一个比这更清洁的soln,也许是GHC扩展或其他我忽略的东西。
无论如何,这不会无法编译在香草GHC,因为你不能有重载记录字段? – jkeuhlen
@jkeuhlen不会。它会创建一个部分函数'name :: Value - > String',它在'name C'中出现'*** Exception:记录选择器名称中不匹配'的错误。您正在考虑具有_different_数据类型中的共享字段的记录。 – Alec
您在数据类型定义中引入了对这种样板文件的需求。相反,你可以写'数据Value = AorB Bool String | C; getName(AorB _ x)= x; getName _ = Nothing' – user2407038