【发布时间】:2016-12-25 12:53:42
【问题描述】:
我有两种数据类型,第二种是第一种的副本,但每个字段都有 Maybe。
data A = {a :: Int, b :: String}
data B = {c :: Maybe Int, d :: Maybe String}
有没有办法制作函数
f :: A -> B
g :: B -> A -> A
对字段本身一无所知? (如果第一个参数的值不是 g 将采用第二个参数的默认值)
【问题讨论】:
-
我认为这是为了让您可以为函数提供可选参数。我宁愿让它接受一个 A 并提供一个默认 A,调用者可以在使用记录更新语法选择性地修改它之后将其传递给您的函数。
-
B 数据类型用作 yaml 配置文件的同构,其中一些选项可能会丢失。但是程序应该使用简单安全的 A 类型。除了将其转换为 A 之外,B 不应用于任何用途。
-
首先是编译时,所以我不能使用不同的默认配置。第二件事在每次使用配置时都会产生大量代码。镜头很复杂,需要很长时间才能理解它们,许多 haskell 开发人员建议不要使用它们。
-
Yaml.Config 也是只读的。