हो रहा है मैं बादल हास्केल पैकेज के Encoding.hs से अधिक देख रहा हूँ, और कुछ अजीब कोड है कि मुझे उम्मीद थी किसी की मदद कर सकता है मुझे बेहतर ढंग से समझने का सामना करना पड़ा।Haskell जादुई कोड, यहाँ क्या
class (Binary a,Typeable a) => Serializable a
instance (Binary a,Typeable a) => Serializable a
data Payload = Payload
{
payloadType :: !ByteString,
payloadContent :: !ByteString
} deriving (Typeable)
serialDecodePure :: (Serializable a) => Payload -> Maybe a
serialDecodePure a = (\id ->
let pc = payloadContent a
in pc `seq`
if (decode $! payloadType a) == show (typeOf $ id undefined)
then Just (id $! decode pc)
else Nothing) id
मैं के बारे में क्या $ बस उत्सुक हूँ: शामिल आवश्यक कोड है! करता है (मैं अनुमान लगा रहा हूं कि सख्ती से मूल्यांकन किया जाता है), और हमें आईडी चाल की आवश्यकता क्यों है (आलसी मूल्यांकन के साथ कुछ?)। इसके अलावा, मैं विशेष रूप से इस लाइन के साथ समस्या हो रही हूँ:
if (decode $! payloadType a) == show (typeOf $ id undefined)
मैं अगर PayloadType जो भी कारण के लिए अमान्य है यह देख रहा है अनुमान लगा रहा हूँ, लेकिन अगर वह यह है कि मामला नहीं तो और बाकी खंड बंद किया जाना चाहिए, यानी परिवर्तन:
if (decode $! payloadType a) == show (typeOf $ id undefined)
then Just (id $! decode pc)
else Nothing
को
if (decode $! payloadType a) == show (typeOf $ id undefined)
then Nothing
else Just (id $! decode pc)
किसी भी मदद प्रदान कर सकते हैं के लिए धन्यवाद।
हां, 'एफ $! एक्स' सख्त आवेदन है। आपको [इस आलेख] (http://neilmitchell.blogspot.com/2008/05/bad-strictness.html) सख्तता जोड़ने के तरीके के बारे में प्रबुद्ध हो सकता है। –
यह भी देखें http://stackoverflow.com/q/2787543/246886 –