प्रश्न 1 उनके प्रकार द्वारा HList तत्वों को प्रतिबंधित करने की कोशिश कर रहा - मूल LUBConstraintsनिराकार:
मेरी पहली मौजूदा LUBConstraints के साथ चारों ओर खेलने की कोशिश सबूत (नीचे दिए गए कोड ब्लॉक देखें) लापता के लिए विफल रहता है। कोई संकेत क्यों? एक खाली सूची लंबी सूची की वैध सूची नहीं है? कोई तत्व बाधा का उल्लंघन नहीं करता है।
import shapeless.ops.coproduct
import shapeless.{::, :+:, Coproduct, HNil, HList}
object testLUBConstraints {
import shapeless.LUBConstraint._
// !!! see comment on question - this satisfies the implicit below!!!
// implicit val hnilLUBForLong = new LUBConstraint[HNil.type, Long] {}
def acceptLong[L <: HList : <<:[Long]#λ](l: L) = true
val validLong = acceptLong(1l :: HNil)
val validEmpty = acceptLong(HNil)
// => WHY??? Error: could not find implicit value for evidence parameter of type shapeless.LUBConstraint[shapeless.HNil.type,Long]
// MY EXPECTATION WAS: 'implicit def hnilLUB[T] = new LUBConstraint[HNil, T] {}' defined within LUBConstraint companion should provide so
// val invalid = acceptLong(1.0d :: HNil) -> fails due to missing evidence (as expected)
}
किसी भी मदद की सराहना की।
: पैरामीटर प्रकार से मामले की कक्षाओं को प्रतिबंधित ( Shapeless: restricting case class types एक separat प्रश्न में विभाजित) -प्रश्न 3: -
प्रश्न 2 खुद की बाधा Coproduct का उपयोग कर (Shapeless: own HList constraint using Coproduct एक अलग सवाल में विभाजित)
मैं स्थानीय रूप से 'अंतर्निहित वैल hnilLUBForLong = नया LUBConstraint [HNil.type, Long] {}' घोषित करके पहले ERROR (_Question 1_ के कोड ब्लॉक में) प्राप्त करने में कामयाब रहा - ऐसा लगता है कि घोषित घोषित मूल्य विधि बिल्कुल मिलान टाइप नहीं करती है: 'LUBConstraint [HNil, Long] =! = LUBConstraint [HNil.type, Long] ' इरादा या यहां तक कि एक बग भी? – sthielo
सीपीसीऑनस्ट्रेन के अंतर्निहित संकल्प पर काम कर रहा है (देखें _Question 2_) 'वैल एचएलएलओएन: :: [लांग, एचएनआईएल] = 1 एल :: एचएनआईएल 'और इसके लिए एक अंतर्निहित वैल सीपीसीएलओएन = निहित [सीपीसीओस्ट्रेन [ hlLong.type, CPType]] 'मैंने 'implicit val scpcEmptyLong1: CPConstraint [:: [Long, HNil], CPType] = new CPConstraint [:: [Long, HNil], CPType] {}', जो ** नहीं करता है ** निहित खोजी गई लेकिन 'अंतर्निहित वैल scpcEmptyLong2: CPConstraint [hlLong.type, CPType] = new CPConstraint [hlLong.type, CPType] {}' होगा। - क्यूं कर??? क्या फर्क पड़ता है? – sthielo
यह शायद तीन अलग-अलग प्रश्न होना चाहिए। पहले मामले में आप 'HNil' को' HNil' के रूप में स्पष्ट रूप से टाइप करके समस्या को ठीक कर सकते हैं: 'स्वीकार करें (एचएनआईएल: एचएनआईएल)' को संकलित करना चाहिए। –