2014-09-17 19 views
5

Ben Markdown newtype tanımlamaya çalışıyor ve otomatik olarak yeni örneklerini tanımlamak için GeneralizedNewtypeDeriving kullanıyorum başarısız Bu, GHC 7.8.2'nin yeni roles özelliklerine bağlı mı? Bu durumda, ne yapacağımı bilmiyorum, çünkü Markdown kendisi Metin üzerinde bir yeni tip ...GeneralizedNewtypeDeriving PersistFieldSql

Veya bunun ile ilgili bir forallsqlType? Diğer tüm örnekler başarıyla otomatik olarak oluşturulduğunda bu hatanın nedeni nedir?

Teşekkür

Bu örneklerden bazıları çok benziyor

cevap

6

(özellikle Vector bir) ne yazık ki, şimdiki rol sistemiyle çalışmayan şeylerin GHC wiki Roles2 sayfasında.

Temelde sorun

class PersistField a => PersistFieldSql a where 
    sqlType :: Monad m => m a -> SqlType 

yılında monad m, kimin argüman, nominal role sahip bir tür kurucusu ile başlatılamaz ihtimalidir böylece m Markdown ve m MarkdownNewTolduklarını değil aynı temsil hatta Markdown ve MarkdownNewT eğer kendileri - ve mevcut rol sistemi, bu tür kuruculara izin vermemek için m'u kısıtlama yoluna sahip değildir.

+0

Kesinlikle haklısınız. Kalıcı 2'de, tam da bu nedenle Proxy'yi kullanmaya geçtik. –

+0

Ørjan Johansen, teşekkürler, ben bunun üzerinde yanıldım ama basit ve özlü açıklama gerçekten yardımcı oldu! – jcristovao

+0

Michael, bu yüzden şimdiki çözüm PersistFieldSql'i manuel olarak tanımlamak veya Persistent 2'yi kullanmak mı? – jcristovao