レコード構文とアズパターン
調べても結構使い方を書いてないな…。
data B = B {
x ::String,
y ::String
}
update_b2 bb@B{} = bb{x ="ccc"}
update_b3 bb@B{x=x2} = bb{x =x2 ++ "ccc"}
update_b4 bb@B{y=y2} = bb{x =y2 ++ "ccc" }
main = do
let b = B { x = "aaa", y = "bbb"}
b2 = update_b2 b
b3 = update_b3 b
b4 = update_b4 b
putStrLn $ x b
putStrLn $ y b
putStrLn $ x b2
putStrLn $ y b2
putStrLn $ x b3
putStrLn $ y b3
putStrLn $ x b4
putStrLn $ y b4
実行結果
aaa bbb ccc bbb aaaccc bbb bbbccc bbb

Debian QA
Facebook (taniguchi.takaki)
Twitter (@takaki_t)