Function to return a Haskell record with a modifie

2019-02-16 10:18发布

Given:

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

I am trying to write a function which puts a new a on list and returns a new MyRecord:

pushOntoList :: a -> MyRecord -> MyRecord

Question:

Is there a way to write pushOntoList is such a way that it does not depend on what is in the rest of the record, but simply gives it back unmodified?

Another way to ask this is can you write pushOntoList without seeing the rest of the MyRecord definition?

1条回答
祖国的老花朵
2楼-- · 2019-02-16 10:58

Yes, very easily using the record accessor/label syntax:

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

as in the function:

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

e.g.

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)
查看更多
登录 后发表回答