나는 소스 코드 Data.Has
을보고 어떻게 작동하는지 알아 내려고했습니다. 다음 코드는 누군가가 "a :: A
"과 "b :: B
"이라는 두 값을 "a
"과 "b
"의 기능을 가진 새로운 값으로 "결합"할 수 있도록하기위한 것입니다.클래스 선언과 인스턴스 선언에 유형 키워드
특히 나는 type
이 클래스 및 인스턴스 선언 내부에서 무엇을 의미하는지 이해하지 못합니다.
또한 ~
의 의미는 무엇입니까?
누군가 아래의 코드를 Data.Has.TypeList에서 설명 할 수 있습니까? typeclass 및 인스턴스 선언 내부
-- | Provides type-list functionality
module Data.Has.TypeList where
import Control.Applicative
import Data.Monoid (Monoid (..))
import Test.QuickCheck (Arbitrary (..), CoArbitrary (..))
import Data.Typeable
import Data.Data
-- | Cons a type onto type-list.
data a ::: b = a ::: b deriving (Show,Eq,Ord,Read,Bounded,Typeable,Data)
-- | The empty type-list.
data TyNil = TyNil deriving (Read,Typeable,Data)
-- | Appends a type-list and another.
class Append a b where
type a :++: b
(.++.) :: a -> b -> a :++: b
infixr 5 :++:
-- Implementation of Append
instance Append TyNil b where
type TyNil :++: b = b
_ .++. b = b
instance (Append y b) => Append (x ::: y) b where
type (x ::: y) :++: b = x ::: (y :++: b)
~(x ::: y) .++. b = x ::: (y .++. b)
관련 유형 동의어라고합니다. 이러한 구조는 기능적 종속성과 유사하지만 관계 대신 형식 함수를 사용합니다. –