2016-08-22 46 views
12

Birisi, aşağıdaki kodun neden GHC 8.0.1'in neden derlenmesinde döngü oluşturduğunu açıklayabilir mi, yoksa bu bir hata mıdır?GHC 8.0.1 kilitleniyor. Açıklama veya derleyici hatası?

{-# LANGUAGE TypeFamilyDependencies #-} 
{-# LANGUAGE FlexibleInstances #-} 
{-# LANGUAGE AllowAmbiguousTypes #-} 

main = return $ f (Just 'c') 

data D1 x 
data D2 

type family TF x = t | t -> x 
type instance TF (D1 x, a) = Maybe (TF (x, a)) 
type instance TF (D2,()) = Char 

f :: TF (x, a) ->() 
f _ =() 
+3

Hiç bir fikrim yok, ancak 'TypeFamilyDependencies' belgelerine sahip olmaları beni ilk zamana hazır olmadıklarından korkuyor. Benim yanımda oturamayan doğal olmayan kısıtlamalar var; Geliştiriciler bir noktayı kaçırırsa şok olmazdım. – dfeuer

+1

Sonsuza dek döngüsüyse kesinlikle bir hata – jberryman

cevap

3

UndecidableInstances veya UndecidableSuperclassCycles olmayan sonsuz bir döngü içine düşen derleyici jberryman stated olarak, bir derleyici hata. GHC Trac sitesinde bildirmelisiniz.

Örneğinizi, bir şeyleri açıklığa kavuşturabilecek veya netleştirmeyecek bir şekilde basitleştirdim ve hata raporunuzu daha etkili hale getirecektir.

{-# LANGUAGE TypeFamilyDependencies #-} 

module TFLoop where 

import Data.Proxy 

main :: IO() 
main = return $ f Proxy Proxy (Just 'c') 

data D1 x 
data D2 

type family TF d a = t | t -> d a 
type instance TF (D1 x) a = Maybe (TF x a) 
type instance TF D2() = Char 

f :: proxy1 x -> proxy2 a -> TF x a ->() 
f _ _ _ =()