GHC, Haskell 98'de izin verilenler dışındaki tür sınıfları için türetilmiş örneklerin derleyici oluşturulmasına olanak tanıyan DeriveFunctor
, DeriveDataTypeable
vb. Gibi birkaç dil işaretine sahiptir. Bu, özellikle bu sınıfın yasalarının olduğu Functor
gibi bir şey için mantıklıdır. Açık bir "doğal" türetilmiş örnek dikte.Neden GHC Monoid için örnek oluşturamıyor?
Neden Monoid
için değil? (Pseudocode mazur)
data T = MkT a b c ...
biri mekanik olarak bir Monoid
örneğini üretmek olabilir: Tek veri yapıcısı ile herhangi bir veri türü için gibi görünüyor
instance (Monoid a, Monoid b, Monoid c, ...) => Monoid T where
mempty =
MkT mempty mempty mempty ...
mappend (MkT a1 b1 c1 ...) (MkT a2 b2 c2 ...) =
MkT (mappend a1 a2) (mappend b1 b2) (mappend c1 c2) ...
şeyin farkındayım derive paket provides this, ama sorum, özellikle de GHC'nin yapmamasının bir nedeni olup olmadığıdır.
@sdcvvc: Bu sorunun geçerli bir cevabı gibi görünüyor. Belki de böyle yazmalısın? –
Tamam, bir cevap verdim. – sdcvvc
Genellikle bir 'Functor' örneği oluşturmak için mantıklı bir yol var. Aynısı 'Monoid' hakkında da doğru değil. – augustss