2014-07-27 18 views
6

'UnMaybe' tipi bir aile yapmaya çalışıyorum ama derleme yapmıyor (örneğin ailesi çakışıyor). İşte Türü ailelerde çakışan örnek nasıl çözülür?

benim kodudur

{-# LANGUAGE TypeFamilies #-} 

type family UnMaybe a :: * 

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

Hata mesajı

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 
işe yaramıyor anlıyorum

, yine wich irade etkinleştirmek için aynı sonucu elde etmek başka bir yol (veya bir uzantısı vardır sağlar olduğu o)

cevap

11

gerçekten bu gerekiyorsa, kapalı bir tip ailesini (gerektiren en az GHC 7.8) kullanabilirsiniz:?

Şimdi
{-# LANGUAGE TypeFamilies #-} 

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

: şimdi anlıyorum

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

ailesini kapalı ne için – mb14