Unit
s modeli "sonsuz" vektörler için sonlu vektörleri tutkal bir miktar türünü kullanan sonlu
Vector
s üzerinde "
ZipVector
" tarzı
Applicative
yaptık
.bağımlı yazılan 'ZipVector' Applicatives
data ZipVector a = Unit a | ZipVector (Vector a)
deriving (Show, Eq)
instance Functor ZipVector where
fmap f (Unit a) = Unit (f a)
fmap f (ZipVector va) = ZipVector (fmap f va)
instance Applicative ZipVector where
pure = Unit
Unit f <*> p = fmap f p
pf <*> Unit x = fmap ($ x) pf
ZipVector vf <*> ZipVector vx = ZipVector $ V.zipWith ($) vf vx
Bu muhtemelen benim ihtiyaçları için yeterli olacaktır, ama ben boş boş istediğim bir "Sabit Boyutlu" Eğer bağımlı yazılan "Vektör" s ile alabilirsiniz uygulamalı örnekleri örnek alınarak bir. d
fantom parametresi bir tür düzeyinde Nat
olan
data Point d a = Point (Vector a) deriving (Show, Eq)
instance Functor (Point d) where
fmap f (Point va) = Point (fmap f va)
instance Applicative Point where
pure = Vector.replicate reifiedDimension
Point vf <*> Point vx = Point $ V.zipWith ($) vf vx
. Haskell'de reifiedDimension
yazabilir miyim? Ayrıca, mümkünse, (Point v1) :: Point d1 a
ve (Point v2) :: Point d2 a
verilirse length v1 == length v2
'u nasıl alabilirim d1 ~ d2
alabilir miyim?
"d :: Sing (Vector.length v)' ifadesini yansıtan "toP :: Vector a -> Point d a" gibi bir akıllı kurucunun sahip olduğunu söylemek ister misiniz? Çalışmaya çalışıyorum ama başarısız oluyor ve henüz tip hatalarının ne söylediğini tam olarak anlayamıyorum. –
@tel: Şunun gibi bir şey deneyin: http://hpaste.org/86437 – hammar
Bunu pLen :: SingI d => Point d a -> Sing d gibi bir şeyle yeniden ilişkilendirmeyi denediğimde; pLen _ = şarkı 'GHC, 'pLen' kullanımından kaynaklanan (SingI Nat d0) için bir örnek yoktur. –