9
Tip aileleriyle veri türlerini kullanırken ilginç bir durum buldum.Haskell tipi aile uygulamaları değerlendirilmiyor
Derleyicinin hata iletisi No instance for (C (ID())) arising from a use of W
. Doymuş olsa bile, bir tip aile uygulamasının tam olarak değerlendirilmediğini gösterir. :kind! ID()
, ()
için değerlendirir, bu nedenle C()
örneğine göre kullanılmalıdır.
{-# LANGUAGE GADTs, TypeFamilies, UndecidableInstances, FlexibleContexts #-}
type family ID t where
ID t = t
class C t where
instance C() where
data W where
W :: C (AppID t) => P t -> W
type family AppID t where
AppID t = (ConstID t)()
type family ConstID t where
ConstID t = ID
data P t where
P :: P t
data A
w :: W
w = W (P :: P A)
Bir şekilde ID()
değerlendirmesini zorlayabilir miyim? Derleyici bir hata mı? Ben GHC 7.8.3
(ID()) bir şeyi nasıl değerlendirir? Kimlik ailesi için örnek yoktur. – augustss
Bunu kapalı tip bir aile olarak yazdım (http://www.haskell.org/haskellwiki/GHC/Type_families#Closed_family_simplification) –
Normal yazım ailesi olarak yazmak hatayı değiştirmez. –