확장 RecordWildCards

Posted on April 17, 2021
{-# 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 확장을 켜고, 매개 변수에 {..} 를 붙여주면 필드명을 바로 값처럼 사용할 수 있습니다. @는 필드로 쪼개기 전, 원래 값을 가리키고 싶을 때 씁니다.


  1. 레코드 타입의 필드 이름은 필드값을 가져올 때 함수와 다를게 없습니다. Some ’타입값 someval 에서 field1 값을 꺼내려면 field1 someval 이렇게 쓰면 됩니다. 이럴 때는 필드명을 접근자accessor로 부르기도 합니다.↩︎

Github 계정이 없는 분은 메일로 보내주세요. lionhairdino at gmail.com