2014-12-03 9 views
4

우리가 내가 어떤 typeclass 이제 A파라 메트릭 typeclass 이름

class AList a 
instance AList Nil 
instance (A x, AList xs) => AList (Cons x xs) 

이 같은 코드를 작성할 수 있습니다

data Nil 
data Cons a b 

이기종 목록을 말해봐,이 매개 변수는에 그래서 그 코드를 일반화하는 방법은 무엇입니까 A?

말해,이 구문

class List (class A) a 
instance List (class A) Nil 
instance (A x, List (class A) xs) => List (class A) (Cons x xs) 

답변

3

내가, 동기를 이해 모르겠어요를했지만 그래, 당신이 GHC의 ConstraintKinds 확장명이 표현할 수처럼 :

{-# LANGUAGE EmptyDataDecls #-} 
{-# LANGUAGE FlexibleInstances #-} 
{-# LANGUAGE KindSignatures #-} 
{-# LANGUAGE MultiParamTypeclasses #-} 
{-# LANGUAGE UndecidableInstances #-} 

import GHC.Exts (Constraint) 

class List (c :: * -> Constraint) a 

data Nil 
data Cons a b 

instance List c Nil 
instance (c x, List c xs) => List c (Cons x xs) 
+0

신난다! 난 그냥 유형 수준의 계산으로 놀고있어 그리고 이것은 내가 갖고 싶습니다. –

관련 문제