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)
Das ist eine Ansicht Muster ist. Sehen Sie [diese Frage] (http://stackoverflow.com/q/20766841/2751851) für einige interessante Beispiele. – duplode