को कम नहीं कर सकता निम्नलिखित कोड में, जीएचसी Monoidal
इंस्टेंस की परिभाषा में फ़ंक्शन उदाहरण नहीं ढूंढ सकता है।सुपरक्लास
GHC क्यों बात का अनुमान लगाना नहीं है कि दियाApplicative
बाधा संतुष्ट है, तो Functor
कहीं पहले से ही हो गया है?
import Prelude hiding (Applicative (..), Monad (..))
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
class Functor f => Monoidal f where
unit::f()
(*) ::f a -> f b -> f (a,b)
instance Applicative f => Monoidal f where
unit = pure()
a * b = undefined
मैं निश्चित रूप से Monoidal
का सुस्पष्ट Functor f
बाधा जोड़ सकता है कोई त्रुटि नहीं करने के लिए पता है, लेकिन मेरे सवाल का उदाहरण संकल्प कि जिस तरह से काम करता है क्यों के बारे में अधिक है (वहाँ इस तर्क 'क्षमता'? करने के लिए एक नाम है)
import Prelude hiding ((*), Applicative (..), Monad (..))
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
class Functor f => Monoidal f where
unit::f()
(*) ::f a -> f b -> f (a,b)
instance (Applicative f, Functor f) => Monoidal f where
unit = pure()
a * b = (pure (,) <*> a <*> b)
instance (Monoidal f, Functor f) => Applicative f where
pure x = fmap (\_ -> x) unit
mu <*> mx = fmap (\(f, x) -> f x) ((mu * mx) :: f (a -> b, a))
मुझे उम्मीद है कि यह स्पष्ट है कि इस तरह का एक उदाहरण बहुत समझ में नहीं आता है! - फिर भी, अच्छा सवाल है, मैं संकलक को यह अनुमति देने और सुपरक्लास को समझने के लिए भी मानता। – leftaroundabout
जो रूट समस्या मैं देख रहा हूं वह यह है कि आपके पास "फंक्टर एफ => मोनोइडल एफ" और "आवेदक एफ => मोनोइडल एफ" दोनों हैं। जैसा कि मैं इसे समझता हूं, संकलक को किसी विशेष प्रकार के विशेष प्रकार के किसी विशेष प्रकार के लिए केवल एक संभावित व्युत्पन्न पथ देखने की आवश्यकता होती है। – NovaDenizen
@ बाएंअराउंडबाउट क्योंकि यह एक आइसोमोर्फिज्म है और आगे यह है कि आपका क्या मतलब है? यही कारण है कि मैं – nicolas