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