2014-07-27 2 views
6

'UnMaybe'유형 패밀리를 수행하려하지만 컴파일되지 않습니다 (인스턴스 패밀리가 충돌 함). 여기 유형 패밀리에서 충돌하는 인스턴스를 해결하는 방법은 무엇입니까?

내 코드입니다

{-# LANGUAGE TypeFamilies #-} 

type family UnMaybe a :: * 

type instance UnMaybe (Maybe a) = a 
type instance UnMaybe a = a 

오류 메시지

test.hs:4:16: 
    Conflicting family instance declarations: 
     type instance UnMaybe (Maybe a) 
     -- Defined at test.hs:4:16 
     type instance UnMaybe a 
     -- Defined at test.hs:5:15 
가 작동하지 않는 이유를 이해

, 어쨌든 느릅 나무의 뜻을 활성화하기 위해 동일한 결과를 얻을 수있는 또 다른 방법 (또는 연장이 허용입니다 그것?)

답변

11

정말 필요한 경우 폐쇄 형 가족 (최소 GHC 7.8 필요)을 사용할 수 있습니다.

이제 6,
{-# LANGUAGE TypeFamilies #-} 

type family UnMaybe a :: * where 
    UnMaybe (Maybe a) = a 
    UnMaybe a   = a 

: 지금 이해

GHCi> :kind! UnMaybe (Maybe Int) 
UnMaybe (Maybe Int) :: * 
= Int 
GHCi> :kind! UnMaybe Bool 
UnMaybe Bool :: * 
= Bool 
+2

가족을 폐쇄 무엇을위한 것입니다 – mb14

관련 문제