धारणा Monad
typeclass द्वारा कब्जा कर लिया नहीं है "कोई मान"। आखिरकार, Monad
केवल आपको अनुक्रम (>>=
) क्रियाओं के लिए कुछ देता है (पिछले परिणाम को बांधें)। और MonadPlus
आपको mzero
के साथ गणना "शॉर्टकट" करने का एक तरीका देता है (कानूनों और mplus
पर एक नज़र डालें)।
हालांकि, एक या कई मूल्यों को रखने में सक्षम होने के कारण आम तौर पर उन सभी मूल्यों को एक साथ जोड़कर सक्षम किया जाता है। और वास्तव में, Data.Foldable
एक समारोह सुविधा भी null
कहा जाता है:
> import qualified Data.Foldable as F
>
> showAndTell :: (Show (t a), Foldable t) => t a -> IO()
> showAndTell k =
> putStrLn $ " F.null (" ++ show k ++ ") is " ++ show (F.null k)
> main = do
> putStrLn "Using F.null on 'empty' things:"
> showAndTell $ (Left "Error" :: Either String Int)
> showAndTell $ (Nothing :: Maybe Integer)
> showAndTell $ ([] :: [Double])
>
> putStrLn ""
> putStrLn "Using F.null on 'filled' things:"
> showAndTell $ (Right 123 :: Either String Integer)
> showAndTell $ (Just 123 :: Maybe Integer)
> showAndTell $ ([1,2,3] :: [Int])
परिणाम:
Using F.null on 'empty' things:
F.null (Left "Error") is True
F.null (Nothing) is True
F.null ([]) is True
Using F.null on 'filled' things:
F.null (Right 123) is False
F.null (Just 123) is False
F.null ([1,2,3]) is False
तो तुम क्या खोज रहे हैं Foldable
का हिस्सा है, नहीं Monad
है। यह केवल जीएचसी 7.10 या उच्चतर पर काम करेगा, क्योंकि Data.Foldable.null
आधार 4.8.0.0 में पेश किया गया था। आप GHC के एक पुराने संस्करण के साथ फंस रहे हैं, तो आप इकाई के बाहर से
> isEmpty :: F.Foldable t => t a -> Bool
> isEmpty = F.foldr (\_ _ -> False) True
ऐसा लगता है कि आपके प्रश्न कुछ – Zeta
@Zeta हां में बाधित हो गए हैं, मैंने गलती से अपने कीबोर्ड पर रिटर्न कुंजी मारा। ^^ – bash0r
मुझे लगता है कि सभी मोनैड के लिए "गलत मूल्य" (मुझे लगता है कि आपको किसी प्रकार की त्रुटि/खाली स्थिति) के रूप में देखा गया है, इसके साथ कुछ समस्याएं हो सकती हैं - क्या आप कुछ परिभाषा/कानूनों के साथ आ सकते हैं जो अलग हैं 'मोनाडप्लस' के लोग? – Carsten