Joh*_*ler 12 syntax haskell record
鉴于:
data MyRecord a = MyRecord{list :: [a], other_fields :: Char, …}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个函数,它将一个新a
的列表放入并返回一个新的MyRecord
:
pushOntoList :: a -> MyRecord -> MyRecord
Run Code Online (Sandbox Code Playgroud)
问题:
有没有一种方法可以写出pushOntoList
这样的方式,它不依赖于记录的其余部分,而只是简单地将其修改为未经修改?
问这个问题的另一种方法是你可以在pushOntoList
不看清楚其余MyRecord
定义的情况下编写吗?
Don*_*art 19
是的,非常容易使用记录访问者/标签语法:
b = a { list = 'x' : list a }
Run Code Online (Sandbox Code Playgroud)
在功能中:
pushOntoList c a = a { list = c : list a }
Run Code Online (Sandbox Code Playgroud)
例如
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)
Run Code Online (Sandbox Code Playgroud)