मेरे पास मेरे कोड पर निम्न है:

  where
    launch :: MonadIO m => m (Maybe Text)
    launch = do
        line <- launchLine
        return $ lineToText <$> line

    launchLine :: MonadIO m => m (Maybe Line)
    launchLine = fold (inproc "juke" ["launch", "--profile", "jukeplay", pack baseImage] mempty) $
        Fold selectLaunchName Nothing id

ऊपर की लाइनें ठीक काम करती हैं। मेरी समस्या (और प्रश्न) यह है कि मैं इस लॉन्च लाइन से पहले एक और कमांड निष्पादित करना चाहता हूं, इसलिए यह कुछ ऐसा हो सकता है:

  where
    launch :: MonadIO m => m (Maybe Text)
    launch = do
        line <- launchLine
        return $ lineToText <$> line

    launchLine :: MonadIO m => m (Maybe Line)
    launchLine = fold (inproc "juke" ["image", "copy", "jukebox:" <> pack baseImage, "local:", "--copy-aliases"] mempty) $
        Fold selectLaunchName Nothing id

    launchLine :: MonadIO m => m (Maybe Line)
    launchLine = fold (inproc "juke" ["launch", "--profile", "jukeplay", pack baseImage] mempty) $
        Fold selectLaunchName Nothing id

यह स्पष्ट रूप से काम नहीं करता है। मैं इसे कैसे पूरा कर सकता था?

मुझे "जूक लॉन्च .." निष्पादित होने से पहले यह "जूक इमेज कॉपी" करने की आवश्यकता है

मदद के लिए अग्रिम धन्यवाद

-1
user1858059 15 पद 2018, 01:01

1 उत्तर

सबसे बढ़िया उत्तर

आप संन्यासी क्रियाओं को (>>) के साथ जोड़ सकते हैं:

(>>) :: Monad m => m a -> m b -> m b

या do सिंटैक्स के साथ, जो (>>) के लिए डिसुगर करता है:

\act1 act2 -> do {act1; act2} :: Monad m => m a -> m b -> m b

उदाहरण के लिए:

launch :: MonadIO m => m (Maybe Text)
launch = do
    preLaunchLine
    line <- launchLine
    return $ lineToText <$> line

preLaunchLine :: MonadIO m => m (Maybe Line)
preLaunchLine = fold (inproc "juke" ["image", "copy", "jukebox:" <> pack baseImage, "local:", "--copy-aliases"] mempty) $
    Fold selectLaunchName Nothing id

launchLine :: MonadIO m => m (Maybe Line)
launchLine = fold (inproc "juke" ["launch", "--profile", "jukeplay", pack baseImage] mempty) $
    Fold selectLaunchName Nothing id
4
Daniel Wagner 15 पद 2018, 01:21