我可以在对其内容进行模式匹配时获得记录吗?

Jes*_*oke 1 haskell record

基本上,我想对记录的内容进行模式匹配,然后返回对所述记录的修改。所以我经常遇到这种情况:

updateChr :: Database -> Database -> Database
updateChr db Database{mode=1, characters=chr} = db{characters=(map someFunc chr)}
updateChr db Database{mode=2, characters=chr} = db{characters=(map someOtherFunc chr)}
Run Code Online (Sandbox Code Playgroud)

其中两个数据库参数应该始终是相同的记录。有没有办法在只通过一次记录的情况下做到这一点?

Wil*_*sem 10

您可以使用as 模式[Haskell-report]

updateChr :: Database -> Database
updateChr db@Database{mode=1, characters=chr} = db {characters=(map someFunc chr)}
updateChr db@Database{mode=2, characters=chr} = db {characters=(map someOtherFunc chr)}
Run Code Online (Sandbox Code Playgroud)

然而,如果你总是想映射characters,你可以在这里使用一个守卫:

updateChr :: Database -> Database
updateChr db@Database{mode=m, characters=chr} = db {characters=map f chr}
    where f | m == 1 = someFunction
            | otherwise = someOtherFunction
Run Code Online (Sandbox Code Playgroud)