【问题标题】:Function to return a Haskell record with a modified field返回带有修改字段的 Haskell 记录的函数
【发布时间】:2011-05-03 02:11:11
【问题描述】:

鉴于

data MyRecord a = MyRecord{list :: [a], other_fields :: Char, …}

我正在尝试编写一个函数,它将一个新的a 放在列表中并返回一个新的MyRecord

pushOntoList :: a -> MyRecord -> MyRecord

问题

有没有办法写pushOntoList 是这样一种方式,它不依赖于记录的其余部分,而只是将其原封不动地返回?

问这个问题的另一种方法是你能写pushOntoList而不看到MyRecord定义的其余部分吗?

【问题讨论】:

  • 如果您对记录字段做任何不重要的事情,我建议您研究 fclabels 或 data-accessor 为您提供可组合的记录访问器。 Haskell 的记录非常丑陋和削弱。

标签: haskell syntax record


【解决方案1】:

是的,很容易使用记录访问器/标签语法:

b = a { list = 'x' : list a }

在函数中:

pushOntoList c a = a { list = c : list a }

例如

data MyRecord a = MyRecord {list :: [a], other_fields :: Char}
    deriving Show

main = do
    let a = MyRecord [] 'x'
        b = a { list = 'x' : list a }
    return (a,b)

【讨论】:

猜你喜欢
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2017-11-26
相关资源
最近更新 更多