2013-07-31 1 views
5

는 내가 Yesod 책에서 촬영 한이 예에서는 템플릿 하스켈에 의해 생성 된 코드를 이해하려고 노력 동안을 보냈어요 (유형 정렬 화의 많은),하지만 한 부분은 아직도 날 혼란 :이해 코드는

데이터 인스턴스 instance EntityField (PersonGeneric backend) typ는 (데이터베이스에서 각 열에 대해 하나의) 의미가 세 가지 데이터 생성자를 가지고
instance PersistEntity (PersonGeneric backend) where 
    data instance Unique (PersonGeneric backend) = 
    data instance EntityField (PersonGeneric backend) typ 
     = typ ~ KeyBackend backend (PersonGeneric backend) => PersonId | 
     typ ~ String => PersonName | 
     typ ~ Int => PersonAge 
    type instance PersistEntityBackend (PersonGeneric backend) = 
     backend 

하지만, 심지어 찾고 후 무엇 물결표는 haskell에서 않습니다, 나는 밑줄을 긋을 수 없다. 그곳에서 무엇을하고 있나. 어떤 타입을 회복하지 못하는 것 이후에 일반적으로 보편적 인 수치화에 사용되는 =>은 왜입니까?

내가 어떤면에서 더 명확해질 수 있는지 알려 주시기 바랍니다.

답변

8

이 구문은 GADT- 구문없이 GADT를 선언하는 데 사용됩니다. 예컨대

data Z a b = (a ~ Int, b ~ Bool) => Z1 a b 
      | (Show a, b ~ Float) => Z2 a b 

data Z a b where 
    Z1 :: Int -> Bool -> Z Int Bool 
    Z2 :: Show a => a -> Float -> Z a Float 
동등