Haskell'de bir geometri kütüphanesi oluşturuyorum. Onu serbest bırakmak niyetinde değilim, bu sadece benim dil bilgimi geliştirmek için kullanıyorum bir proje. Tipler ve GADT'ler
I referans çerçevesi Vector çerçevenin Kalkış ve çerçevenin dönüşü temsil eder bir açı, "mutlak hem de tanımlanan wrt işaret aşağıdaki tanımdata Local a where
MkLocal :: (Vectorise a) => ReferenceFrame -> a -> Local a
ile, bir Local
veri türü vardır "referans çerçevesi (hey, bu gerçek dünya değil!). Bir Vectorise
geometrisi, Vector
listesine dönüştürülebilir bir dönüşüme sahip olan bir geometridir.
instance Functor Local where
fmap f geom = localise (frame geom) (f $ local geom)
ama derleyici tanımındaki lokalize kullanımı için Vectorisable hiçbir örnek yoktur şikayet:
O şöyle YerelFunctor
örneğidir olabileceğini aklıma geldi. Sayısız GHC uzantısından birini kullanarak bu sınırlamanın etrafında bir yolu var mı?
DÜZENLEME: Açıklamalarda istediği gibi burada türlerinden bazıları fmap
tip (a -> b) -> f a -> f b
çünkü hata,
No instance for (Vectorise b)
arising from a use of `localise'
In the expression:
localise (frame geom) (f $ local geom)
In an equation for `fmap':
fmap f lgeom = localise (frame geom) (f $ local geom))
In the instance declaration for `Functor Local'
olduğunu
local :: Local a -> a
frame :: Local a -> ReferenceFrame
localise :: (Vectorise a) => ReferenceFrame -> a -> Local a
kullandı. a
'un Vectorise
'un bir örneği olması gerektiğine karar verebilir, ancak'un, bir şekilde başka bir yazım tablosunu tanımlamaksızın f
kısıtlanmış dönüş türüne sahip olması gerektiğini belirleyebildiğimi belirtmedikçe, bunun nasıl olacağını tahmin edebilirdim Zaten 'un zaten hesaba uyduğu (ya da bir şekilde, bu şekilde sınıfları kısıtlamanın neden bu tür çıkarımların neden bir şekilde kırılabileceğini açıklayabiliyorsa).
ps. Ayrıca ben local
ve frame
fmap
Lütfen bize 'localise', 'local' ve' frame' türlerini ve aldığınız hata iletisini gösterin. Benim tahminim, "Yerel" için "Vectorise" örneğini kaçırıyor olmanızdır. –
Bitti. Örnek bildirimi eklemeyi denedim, ancak yardımcı olmadı. Bu 'f', 'Yerel' a değil, görebildiğim kadarıyla 'Vectorise' olarak bildirmem gereken bir dönüş türü. – ovangle