2015-10-27 7 views
7

Im Code eine Funktion zu definieren, ist es eine seltsame „Mustererkennung“ (cradleRootDir -> projdir)Pattern Match in Funktionsargument in Haskell

Ich denke, dass die Funktion inline gelten sollte und bindet das Ergebnis an den Namen projdir.

Wie lautet der Name dieses Konstrukts?

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 

Der Konstruktor

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

Das ist eine Ansicht Muster ist. Sehen Sie [diese Frage] (http://stackoverflow.com/q/20766841/2751851) für einige interessante Beispiele. – duplode

Antwort

7

Es View Patterns

Auswertung unter Verwendung Um einen Wert v gegen ein Muster übereinstimmen (expr -> pat), zu bewerten (expr v) und entsprechen der Ergebnis gegen Pat.

Siehe cabal file

Default-Extensions: ScopedTypeVariables, RecordWildCards, NamedFieldPuns, 
         ConstraintKinds, FlexibleContexts, 
         DataKinds, KindSignatures, TypeOperators, ViewPatterns 
                   ^^^^^^^^^^^^ 
                   | | | | | 
Verwandte Themen