NamedFieldPuns
recordを引数に取る時に、fieldのパターンマッチを略記する
何が変わるのか
通常は、Recordを引数に取る時にパターンマッチができる
code:hs
data Hoge = Hoge { h1 :: Int, h2 :: Int }
f :: Hoge -> Int
f Hoge { h1 = 2 } = 2 -- h1が2ならマッチ
同じノリでパターンマッチによって値を取り出せる
code:hs
f :: Hoge -> Int
f Hoge { h1 = n } = n
実際は、名前を揃えてこう書かれることが多い
code:hs
f Hoge { h1 = h1 } = h1
これを略記するのがNamedFieldPuns
こう書ける
code:hs
f :: Hoge -> Int
f Hoge { h1 } = h1
複数もok
code:hs
f Hoge { h1, h2 } = h1 + h2
code:hs
f h@Hoge { h1, h2 } = ...
Consturcot時も使える
code:hs
mkHoge h1 h2 = Hoge { h1, h2 }
-- mkHoge h1 h2 = Hoge { h1 = h1, h2 = h2} 通常はこう書く
JSの記法に似ている
code:js
const f = ({id: x}) => x
const g = ({id}) => id