{-# LANGUAGE RecordWildCards #-}
data Some = Some { field1 :: Int
, field2 :: Int
}
func :: Some -> Int
func full@Some{..} = field1 + field2 + func2 full
func2 :: Some -> Int
func2 some = field1 some * field2 some
main :: IO ()
main = do
let sVal = Some 1 2
print $ func sVa레코드의 필드값에 접근 할 때, 보통 func2처럼 field1 some 필드명1 뒤에 매개 변수를 써줘야 하는데, RecordWildCard 확장을 켜고, 매개 변수에 {..} 를 붙여주면 필드명을 바로 값처럼 사용할 수 있습니다. @는 필드로 쪼개기 전, 원래 값을 가리키고 싶을 때 씁니다.
레코드 타입의 필드 이름은 필드값을 가져올 때 함수와 다를게 없습니다. Some ’타입값 someval 에서 field1 값을 꺼내려면 field1 someval 이렇게 쓰면 됩니다. 이럴 때는 필드명을 접근자accessor로 부르기도 합니다.↩︎