kayıt işlevinin geri alınması Sum of Products
yaklaşımında, kayıt fonksiyonu nasıl alınır? kayıt veri türü ile aşağıda bir örnek kodu (ghc 7.10.3
):Genel SOP
{-# LANGUAGE DeriveGeneriC#-}
import qualified GHC.Generics as GHC
import Generics.SOP
data Rec = Rec { frec :: Int, srec :: Maybe String}
deriving (Show, GHC.Generic)
instance Generic Rec -- empty
instance HasDatatypeInfo Rec
bize GHCi isteminde DataTypeInfo
görelim: frec
ve srec
bir yapıcı FieldInfo
sahiptir tip FieldInfo
her iki olduklarını görüyoruz
*Main> datatypeInfo (Proxy :: Proxy Rec)
ADT "Main" "Rec" (Record "Rec" (FieldInfo "frec" :* (FieldInfo "srec" :* Nil)) :* Nil)
hangi fieldName
dizesini string olarak alır. Yani, frec :: Rec -> Int
ve gerçek işlevlerini elde etmek için herhangi bir yol göremiyorum. Ayrıca show example'a da baktım ama kayıt fonksiyonlarını kullanmıyor.
Kayıt işlevlerini nasıl alacağınız hakkında işaretçilerden memnun kalacaksınız (HList '[(Rec -> Int), (Rec -> Maybe String)]
türünde HList olabilir)). Ben yaklaşım user2407038 kullanarak projeksiyonlar dışına fonksiyonlarını nasıl kurulacağı hakkında tipi knot kadar bağlıyım soru
için
Zeyilname dışarı hazırladı. Yani, daha fazla soruya eklemek ister olacaktır: Biz Rec
yapıcı SOP
yaklaşım kullanarak aşağıda bir işlev gibi yaratırım nasıl - ikimiz de rekor alan adını yanı sıra burada işlevini kullanın:
[ ("frec" ++) . show . frec, ("srec" ++) . show . srec]
Projeksiyonun kendiliğinden algılanmaması ve fieldInfo'nın göz ardı edilmesi kayıt işlevini almak için yeterli olur mu? Dediğiniz gibi, burada 'projeksiyonlar' türü 'NP' [Kod Rec -> Int, Kod Rec -> Belki Dize] 'dir. Ayrıca, 'Rep a = SOP I (Kod a))'. Bunu 'to' ile eşleştirmeniz bize '' bir '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'işlevi ile bir eşleştirmeli. İşte bu yüzden: *: 'için ihtiyaç konusunda kafam karıştı. Burada daha fazla bilgi için takdir edeceksiniz. – Sal
Ayrıca, özellikle 'ghci' türündeki projeksiyonların türünü nasıl hesapladınız? Bu adım denemede çok yardımcı olacaktır. – Sal
Üzgünüm - Ben * ve * isimlerini istediğini sanmıştım. Gerçekten de, sadece NP ((->) t) r 'olabilir - bu sadece fonksiyonlardır. Ayrıca, genel tip hakkında anlayışımı temel alarak, sadece kafamın içinde GHCi'deki türü hesaplamamıştım. Ancak ghci'ye, örneğin, örn. ': t projeksiyonları :: (Kod Rec ~ '[xs]) => NP (Projeksiyon f xs) xs' - tür," projeksiyonlar "ın genel türüdür ve kısıtlama, sorunda kullanılanla aynıdır. '' NP (Projeksiyon f '[Int, Belki Dize])' [Int, Belki Dize] 'diyor. – user2407038