Şablon haskell ekleme yazıyorum ve doğru türde Name
s üretmek için mücadele ediyorum. Bilinen bir ad oluşturmak istiyorsam (örneğin, f
işlevi), 'f
'u kullanabilirim. Bu, nerede kullanıldığımı değil, tam olarak ne istediğimi, ekini tanımladığım kapsamda olmak için f
gerektirir.Geçerli kapsamı oluştururken haskell şablonunda dinamik İsim üret
Şimdi aynı şeyi istiyorum, ancak dinamik bir ad için. Örneğin, eklediğimin bir argüman olarak n :: Int
aldığını varsayalım. "f" ++ show n
ürününü Name
olarak oluşturmak istiyorum, kullanım yeri yerine ekleme tanımı sitesinde bakın.
Birkaç seçenek denedim: mkName
ve lookupValueName
her ikisinin de kullanım alanında kapsamda olmasını gerektirir. Tek tırnaklı söz dizimi, bir dinamik isim değil, basit bir isme ihtiyaç duyar.
Son olarak mkNameG
ile deneme yapmaya başladım. İşlevler, kullandığım paketin aynısından geldiğinden, paket adıyla başladım, ancak bu, Can't find interface-file declaration for variable the-package-name:Some.Module.f0
hatalarını verdi. Bazı kaynak okumalardan sonra, paket adı "main"
'un kullanıldığı yerler buldum. Bu GHCi'de çalışıyor gibi görünüyor, ama derlerken hala aynı hatayı alıyorum.
Bunu yapmanın bir yolu var mı? Tabii ki tüm seçenekleri sıralayabilirim, ancak bu egzersizin bütün amacı kodu daha dinamik yapmak olduğundan, bundan kaçınmak isterim.
Teşekkürler, bu harika çalışıyor! Bahsettiğiniz iki sorun aslında benim durumumda sorun teşkil etmeyebilir, çünkü: 1) Tanımlayıcılar TH tarafından da üretildi, aynı girdilerden ve 2) Tanımlar ihraç edildi. Biraz daha düşünmeye başladığımda, iki TH parçasını birleştirebiliyor ve problemden tamamen kurtulabiliyorum. –