2015-10-27 6 views
7

कोड में समारोह तर्क में मैच, वहाँ एक अजीब "पैटर्न मैच" (cradleRootDir -> projdir)पैटर्न एक समारोह को परिभाषित करने Haskell

मुझे लगता है कि समारोह इनलाइन लागू करने के लिए होती है और नाम projdir लिए परिणाम बांधता है।

उस निर्माण का नाम क्या है?

withGhcModEnv' :: (IOish m, GmOut m) => (FilePath -> (Cradle -> m a) -> m a) -> FilePath -> Options -> ((GhcModEnv, GhcModLog) -> m a) -> m a 
withGhcModEnv' withCradle dir opts f = 
    withCradle dir $ \crdl -> 
     withCradleRootDir crdl $ 
     f (GhcModEnv opts crdl, undefined) 
where 
    withCradleRootDir (cradleRootDir -> projdir) a = do 
     cdir <- liftIO $ getCurrentDirectory 
     eq <- liftIO $ pathsEqual projdir cdir 
     if not eq 
      then throw $ GMEWrongWorkingDirectory projdir cdir 
      else a 

निर्माता

data Cradle = Cradle { 
    cradleCurrentDir :: FilePath 
    , cradleRootDir :: FilePath 
    , cradleCabalFile :: Maybe FilePath 
    , cradlePkgDbStack :: [GhcPkgDb] 
    } deriving (Eq, Show) 
+3

एक दृश्य के पैटर्न है कि देखें। कुछ दिलचस्प उदाहरणों के लिए [यह प्रश्न] देखें (http://stackoverflow.com/q/20766841/2751851)। – duplode

उत्तर

7

यह View Patterns

मूल्यांकन उपयोग कर रहा है एक पैटर्न के खिलाफ एक मूल्य के वी मिलान करने के लिए (expr -> पैट), का मूल्यांकन (expr v) और मेल खाते हैं पेट के खिलाफ परिणाम।

cabal file

Default-Extensions: ScopedTypeVariables, RecordWildCards, NamedFieldPuns, 
         ConstraintKinds, FlexibleContexts, 
         DataKinds, KindSignatures, TypeOperators, ViewPatterns 
                   ^^^^^^^^^^^^ 
                   | | | | | 
संबंधित मुद्दे