ソースコードを調べて、Data.Has
それがどのように機能するかを理解しようとしていました。次のコードは、誰かが と の両方の機能を持つ新しい値に と という 2 つの値を「結合」できるようにするためのものだと思いa :: A
ます。b :: B
a
b
type
特に、クラスとインスタンスの宣言の中で何を意味するのかわかりません。
~
また、以下の記号の意味がわかりません。
誰かがData.Has.TypeListの動作から以下のコードを説明できますか?
-- | 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)