2009년 8월 21일 금요일

haskell 확장 RecordWildCards

메뉴얼 참고
NamedFieldPuns 확장하고 같이 쓰면 타이핑 줄이는데 도움이 많이 되겠네   

쌩기초 문법만 알고 있는 상태에서 haskell 코드 구경하다 이런 문법을 만나면 정말 난감하다. lisp 이면 매크로를 따라갈수라도 있지. haskell 의 경우 좀 덩치큰 소스는 확장을 여러개 해서 LANGUAGE 프라그마가 여러개 나오는데 해당 소스의 신기한 문법이 도대체 어디서 나온건지 알수가 없다...

뭐 천천히 구경을 계속해보자.

{-# LANGUAGE RecordWildCards #-}

-- 많은 필드를 가진 레코드가 있을때
data C = C {
a :: Int,
b :: Int,
c :: Int,
d :: Int
} deriving (Show)


-- 원래대로라면 미칠듯한 타이핑을 해야한다.
f C{a=a, b=b, c=c, d=d} = a+b+c+d

-- .. 으로 모든 필드를 읽어올수있다.
g C{..} = a+b+c+d

-- 일부만 패턴을 주는것도 가능
h C{a=1,..} = b+c+d

-- 헐 이런짓도 가능.
i = C {a=1,..}
where b=2
c=3
d=4


댓글 없음: