RSS

レコード構文とアズパターン

調べても結構使い方を書いてないな…。

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