code simplification thanks to applicative functors
This commit is contained in:
parent
20259c2955
commit
678726c10c
15 changed files with 46 additions and 36 deletions
7
Annex.hs
7
Annex.hs
|
@ -20,6 +20,7 @@ module Annex (
|
||||||
|
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Control.Monad.IO.Control
|
import Control.Monad.IO.Control
|
||||||
|
import Control.Applicative hiding (empty)
|
||||||
|
|
||||||
import qualified Git
|
import qualified Git
|
||||||
import Git.Queue
|
import Git.Queue
|
||||||
|
@ -36,7 +37,9 @@ newtype Annex a = Annex { runAnnex :: StateT AnnexState IO a }
|
||||||
Monad,
|
Monad,
|
||||||
MonadIO,
|
MonadIO,
|
||||||
MonadControlIO,
|
MonadControlIO,
|
||||||
MonadState AnnexState
|
MonadState AnnexState,
|
||||||
|
Functor,
|
||||||
|
Applicative
|
||||||
)
|
)
|
||||||
|
|
||||||
-- internal state storage
|
-- internal state storage
|
||||||
|
@ -83,7 +86,7 @@ newState gitrepo = AnnexState
|
||||||
|
|
||||||
{- Create and returns an Annex state object for the specified git repo. -}
|
{- Create and returns an Annex state object for the specified git repo. -}
|
||||||
new :: Git.Repo -> IO AnnexState
|
new :: Git.Repo -> IO AnnexState
|
||||||
new gitrepo = newState `liftM` Git.configRead gitrepo
|
new gitrepo = newState <$> Git.configRead gitrepo
|
||||||
|
|
||||||
{- performs an action in the Annex monad -}
|
{- performs an action in the Annex monad -}
|
||||||
run :: AnnexState -> Annex a -> IO (a, AnnexState)
|
run :: AnnexState -> Annex a -> IO (a, AnnexState)
|
||||||
|
|
|
@ -20,6 +20,7 @@ module Branch (
|
||||||
|
|
||||||
import Control.Monad (when, unless, liftM)
|
import Control.Monad (when, unless, liftM)
|
||||||
import Control.Monad.State (liftIO)
|
import Control.Monad.State (liftIO)
|
||||||
|
import Control.Applicative ((<$>))
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import Data.String.Utils
|
import Data.String.Utils
|
||||||
|
@ -158,7 +159,7 @@ update = do
|
||||||
staged <- stageJournalFiles
|
staged <- stageJournalFiles
|
||||||
|
|
||||||
refs <- siblingBranches
|
refs <- siblingBranches
|
||||||
updated <- catMaybes `liftM` mapM updateRef refs
|
updated <- catMaybes <$> mapM updateRef refs
|
||||||
g <- Annex.gitRepo
|
g <- Annex.gitRepo
|
||||||
unless (null updated && not staged) $ liftIO $
|
unless (null updated && not staged) $ liftIO $
|
||||||
Git.commit g "update" fullname (fullname:updated)
|
Git.commit g "update" fullname (fullname:updated)
|
||||||
|
@ -182,7 +183,7 @@ hasOrigin = refExists originname
|
||||||
|
|
||||||
{- Does the git-annex branch or a foo/git-annex branch exist? -}
|
{- Does the git-annex branch or a foo/git-annex branch exist? -}
|
||||||
hasSomeBranch :: Annex Bool
|
hasSomeBranch :: Annex Bool
|
||||||
hasSomeBranch = liftM (not . null) siblingBranches
|
hasSomeBranch = not . null <$> siblingBranches
|
||||||
|
|
||||||
{- List of all git-annex branches, including the main one and any
|
{- List of all git-annex branches, including the main one and any
|
||||||
- from remotes. -}
|
- from remotes. -}
|
||||||
|
@ -323,7 +324,7 @@ getJournalFile file = do
|
||||||
|
|
||||||
{- List of journal files. -}
|
{- List of journal files. -}
|
||||||
getJournalFiles :: Annex [FilePath]
|
getJournalFiles :: Annex [FilePath]
|
||||||
getJournalFiles = liftM (map fileJournal) getJournalFilesRaw
|
getJournalFiles = map fileJournal <$> getJournalFilesRaw
|
||||||
|
|
||||||
getJournalFilesRaw :: Annex [FilePath]
|
getJournalFilesRaw :: Annex [FilePath]
|
||||||
getJournalFilesRaw = do
|
getJournalFilesRaw = do
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Control.Monad.State (liftIO)
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.Posix.Files
|
import System.Posix.Files
|
||||||
import Control.Monad (filterM, liftM, when)
|
import Control.Monad (filterM, liftM, when)
|
||||||
|
import Control.Applicative
|
||||||
import System.Path.WildMatch
|
import System.Path.WildMatch
|
||||||
import Text.Regex.PCRE.Light.Char8
|
import Text.Regex.PCRE.Light.Char8
|
||||||
import Data.List
|
import Data.List
|
||||||
|
@ -183,7 +184,7 @@ withNothing a [] = return [a]
|
||||||
withNothing _ _ = error "This command takes no parameters."
|
withNothing _ _ = error "This command takes no parameters."
|
||||||
|
|
||||||
backendPairs :: CommandSeekBackendFiles
|
backendPairs :: CommandSeekBackendFiles
|
||||||
backendPairs a files = liftM (map a) $ Backend.chooseBackends files
|
backendPairs a files = map a <$> Backend.chooseBackends files
|
||||||
|
|
||||||
{- Filter out files those matching the exclude glob pattern,
|
{- Filter out files those matching the exclude glob pattern,
|
||||||
- if it was specified. -}
|
- if it was specified. -}
|
||||||
|
@ -204,7 +205,7 @@ wildsRegex ws = compile regex []
|
||||||
|
|
||||||
{- filter out symlinks -}
|
{- filter out symlinks -}
|
||||||
notSymlink :: FilePath -> IO Bool
|
notSymlink :: FilePath -> IO Bool
|
||||||
notSymlink f = liftM (not . isSymbolicLink) $ liftIO $ getSymbolicLinkStatus f
|
notSymlink f = liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f
|
||||||
|
|
||||||
{- Descriptions of params used in usage messages. -}
|
{- Descriptions of params used in usage messages. -}
|
||||||
paramRepeating :: String -> String
|
paramRepeating :: String -> String
|
||||||
|
@ -271,4 +272,4 @@ preserveOrder orig new = collect orig new
|
||||||
- of git file list commands, that assumption tends to hold.
|
- of git file list commands, that assumption tends to hold.
|
||||||
-}
|
-}
|
||||||
runPreserveOrder :: ([FilePath] -> IO [FilePath]) -> [FilePath] -> IO [FilePath]
|
runPreserveOrder :: ([FilePath] -> IO [FilePath]) -> [FilePath] -> IO [FilePath]
|
||||||
runPreserveOrder a files = liftM (preserveOrder files) (a files)
|
runPreserveOrder a files = preserveOrder files <$> a files
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
module Command.Migrate where
|
module Command.Migrate where
|
||||||
|
|
||||||
import Control.Monad.State (liftIO)
|
import Control.Monad.State (liftIO)
|
||||||
|
import Control.Applicative
|
||||||
import System.Posix.Files
|
import System.Posix.Files
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
|
@ -39,7 +40,7 @@ start (file, b) = isAnnexed file $ \(key, oldbackend) -> do
|
||||||
next $ perform file key newbackend
|
next $ perform file key newbackend
|
||||||
else stop
|
else stop
|
||||||
where
|
where
|
||||||
choosebackend Nothing = return . head =<< Backend.orderedList
|
choosebackend Nothing = head <$> Backend.orderedList
|
||||||
choosebackend (Just backend) = return backend
|
choosebackend (Just backend) = return backend
|
||||||
|
|
||||||
{- Checks if a key is upgradable to a newer representation. -}
|
{- Checks if a key is upgradable to a newer representation. -}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
module Command.Status where
|
module Command.Status where
|
||||||
|
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
|
import Control.Applicative
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import System.IO
|
import System.IO
|
||||||
import Data.List
|
import Data.List
|
||||||
|
@ -112,12 +113,10 @@ total_annex_size = stat "total annex size" $
|
||||||
cachedKeysReferenced >>= keySizeSum
|
cachedKeysReferenced >>= keySizeSum
|
||||||
|
|
||||||
local_annex_keys :: Stat
|
local_annex_keys :: Stat
|
||||||
local_annex_keys = stat "local annex keys" $
|
local_annex_keys = stat "local annex keys" $ show . snd <$> cachedKeysPresent
|
||||||
return . show . snd =<< cachedKeysPresent
|
|
||||||
|
|
||||||
total_annex_keys :: Stat
|
total_annex_keys :: Stat
|
||||||
total_annex_keys = stat "total annex keys" $
|
total_annex_keys = stat "total annex keys" $ show . snd <$> cachedKeysReferenced
|
||||||
return . show . snd =<< cachedKeysReferenced
|
|
||||||
|
|
||||||
tmp_size :: Stat
|
tmp_size :: Stat
|
||||||
tmp_size = staleSize "temporary directory size" gitAnnexTmpDir
|
tmp_size = staleSize "temporary directory size" gitAnnexTmpDir
|
||||||
|
@ -126,8 +125,7 @@ bad_data_size :: Stat
|
||||||
bad_data_size = staleSize "bad keys size" gitAnnexBadDir
|
bad_data_size = staleSize "bad keys size" gitAnnexBadDir
|
||||||
|
|
||||||
backend_usage :: Stat
|
backend_usage :: Stat
|
||||||
backend_usage = stat "backend usage" $
|
backend_usage = stat "backend usage" $ usage <$> cachedKeysReferenced
|
||||||
return . usage =<< cachedKeysReferenced
|
|
||||||
where
|
where
|
||||||
usage (ks, _) = pp "" $ sort $ map swap $ splits ks
|
usage (ks, _) = pp "" $ sort $ map swap $ splits ks
|
||||||
splits :: [Key] -> [(String, Integer)]
|
splits :: [Key] -> [(String, Integer)]
|
||||||
|
|
|
@ -9,7 +9,7 @@ module Config where
|
||||||
|
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Control.Monad.State (liftIO)
|
import Control.Monad.State (liftIO)
|
||||||
import Control.Monad (liftM)
|
import Control.Applicative
|
||||||
import System.Cmd.Utils
|
import System.Cmd.Utils
|
||||||
|
|
||||||
import qualified Git
|
import qualified Git
|
||||||
|
@ -47,8 +47,8 @@ remoteConfig r key = "remote." ++ fromMaybe "" (Git.repoRemoteName r) ++ ".annex
|
||||||
remoteCost :: Git.Repo -> Int -> Annex Int
|
remoteCost :: Git.Repo -> Int -> Annex Int
|
||||||
remoteCost r def = do
|
remoteCost r def = do
|
||||||
cmd <- getConfig r "cost-command" ""
|
cmd <- getConfig r "cost-command" ""
|
||||||
return . safeparse =<< if not $ null cmd
|
safeparse <$> if not $ null cmd
|
||||||
then liftM snd $ liftIO $ pipeFrom "sh" ["-c", cmd]
|
then liftIO $ snd <$> pipeFrom "sh" ["-c", cmd]
|
||||||
else getConfig r "cost" ""
|
else getConfig r "cost" ""
|
||||||
where
|
where
|
||||||
safeparse v
|
safeparse v
|
||||||
|
|
|
@ -38,6 +38,7 @@ import System.IO
|
||||||
import System.Posix.IO
|
import System.Posix.IO
|
||||||
import System.Posix.Types
|
import System.Posix.Types
|
||||||
import System.Posix.Process
|
import System.Posix.Process
|
||||||
|
import Control.Applicative
|
||||||
import Control.Concurrent
|
import Control.Concurrent
|
||||||
import Control.Exception (finally)
|
import Control.Exception (finally)
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
@ -136,7 +137,7 @@ encryptCipher (Cipher c) (KeyIds ks) = do
|
||||||
{- Decrypting an EncryptedCipher is expensive; the Cipher should be cached. -}
|
{- Decrypting an EncryptedCipher is expensive; the Cipher should be cached. -}
|
||||||
decryptCipher :: RemoteConfig -> EncryptedCipher -> IO Cipher
|
decryptCipher :: RemoteConfig -> EncryptedCipher -> IO Cipher
|
||||||
decryptCipher _ (EncryptedCipher encipher _) =
|
decryptCipher _ (EncryptedCipher encipher _) =
|
||||||
return . Cipher =<< gpgPipeStrict decrypt encipher
|
Cipher <$> gpgPipeStrict decrypt encipher
|
||||||
where
|
where
|
||||||
decrypt = [ Param "--decrypt" ]
|
decrypt = [ Param "--decrypt" ]
|
||||||
|
|
||||||
|
|
3
Git.hs
3
Git.hs
|
@ -63,6 +63,7 @@ module Git (
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Monad (unless, when)
|
import Control.Monad (unless, when)
|
||||||
|
import Control.Applicative
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.Posix.Directory
|
import System.Posix.Directory
|
||||||
|
@ -446,7 +447,7 @@ commit g message newref parentrefs = do
|
||||||
pipeWriteRead g (map Param $ ["commit-tree", tree] ++ ps) message
|
pipeWriteRead g (map Param $ ["commit-tree", tree] ++ ps) message
|
||||||
run g "update-ref" [Param newref, Param sha]
|
run g "update-ref" [Param newref, Param sha]
|
||||||
where
|
where
|
||||||
ignorehandle a = return . snd =<< a
|
ignorehandle a = snd <$> a
|
||||||
ps = concatMap (\r -> ["-p", r]) parentrefs
|
ps = concatMap (\r -> ["-p", r]) parentrefs
|
||||||
|
|
||||||
{- Reads null terminated output of a git command (as enabled by the -z
|
{- Reads null terminated output of a git command (as enabled by the -z
|
||||||
|
|
|
@ -24,6 +24,7 @@ module LocationLog (
|
||||||
|
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Control.Monad (when)
|
import Control.Monad (when)
|
||||||
|
import Control.Applicative
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
||||||
import qualified Git
|
import qualified Git
|
||||||
|
@ -49,7 +50,7 @@ keyLocations key = currentLog $ logFile key
|
||||||
{- Finds all keys that have location log information.
|
{- Finds all keys that have location log information.
|
||||||
- (There may be duplicate keys in the list.) -}
|
- (There may be duplicate keys in the list.) -}
|
||||||
loggedKeys :: Annex [Key]
|
loggedKeys :: Annex [Key]
|
||||||
loggedKeys = return . mapMaybe (logFileKey . takeFileName) =<< Branch.files
|
loggedKeys = mapMaybe (logFileKey . takeFileName) <$> Branch.files
|
||||||
|
|
||||||
{- The filename of the log file for a given key. -}
|
{- The filename of the log file for a given key. -}
|
||||||
logFile :: Key -> String
|
logFile :: Key -> String
|
||||||
|
|
|
@ -28,6 +28,7 @@ import Data.Time
|
||||||
import System.Locale
|
import System.Locale
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import Control.Monad.State (liftIO)
|
import Control.Monad.State (liftIO)
|
||||||
|
import Control.Applicative
|
||||||
|
|
||||||
import qualified Branch
|
import qualified Branch
|
||||||
import Types
|
import Types
|
||||||
|
@ -81,7 +82,7 @@ addLog file line = do
|
||||||
{- Reads a log file.
|
{- Reads a log file.
|
||||||
- Note that the LogLines returned may be in any order. -}
|
- Note that the LogLines returned may be in any order. -}
|
||||||
readLog :: FilePath -> Annex [LogLine]
|
readLog :: FilePath -> Annex [LogLine]
|
||||||
readLog file = return . parseLog =<< Branch.get file
|
readLog file = parseLog <$> Branch.get file
|
||||||
|
|
||||||
parseLog :: String -> [LogLine]
|
parseLog :: String -> [LogLine]
|
||||||
parseLog s = filter parsable $ map read $ lines s
|
parseLog s = filter parsable $ map read $ lines s
|
||||||
|
|
13
Remote.hs
13
Remote.hs
|
@ -29,11 +29,12 @@ module Remote (
|
||||||
forceTrust
|
forceTrust
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Monad (filterM, liftM2)
|
import Control.Monad (filterM)
|
||||||
import Data.List
|
import Data.List
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.String.Utils
|
import Data.String.Utils
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
import Control.Applicative
|
||||||
|
|
||||||
import Types
|
import Types
|
||||||
import Types.Remote
|
import Types.Remote
|
||||||
|
@ -111,10 +112,10 @@ nameToUUID "." = getUUID =<< Annex.gitRepo -- special case for current repo
|
||||||
nameToUUID n = do
|
nameToUUID n = do
|
||||||
res <- byName' n
|
res <- byName' n
|
||||||
case res of
|
case res of
|
||||||
Left e -> return . fromMaybe (error e) =<< byDescription
|
Left e -> fromMaybe (error e) <$> byDescription
|
||||||
Right r -> return $ uuid r
|
Right r -> return $ uuid r
|
||||||
where
|
where
|
||||||
byDescription = return . M.lookup n . invertMap =<< uuidMap
|
byDescription = M.lookup n . invertMap <$> uuidMap
|
||||||
invertMap = M.fromList . map swap . M.toList
|
invertMap = M.fromList . map swap . M.toList
|
||||||
swap (a, b) = (b, a)
|
swap (a, b) = (b, a)
|
||||||
|
|
||||||
|
@ -124,10 +125,10 @@ prettyPrintUUIDs uuids = do
|
||||||
here <- getUUID =<< Annex.gitRepo
|
here <- getUUID =<< Annex.gitRepo
|
||||||
-- Show descriptions from the uuid log, falling back to remote names,
|
-- Show descriptions from the uuid log, falling back to remote names,
|
||||||
-- as some remotes may not be in the uuid log
|
-- as some remotes may not be in the uuid log
|
||||||
m <- liftM2 M.union uuidMap $
|
m <- M.union <$> uuidMap <*> availMap
|
||||||
return . M.fromList . map (\r -> (uuid r, name r)) =<< genList
|
|
||||||
return $ unwords $ map (\u -> "\t" ++ prettify m u here ++ "\n") uuids
|
return $ unwords $ map (\u -> "\t" ++ prettify m u here ++ "\n") uuids
|
||||||
where
|
where
|
||||||
|
availMap = M.fromList . map (\r -> (uuid r, name r)) <$> genList
|
||||||
prettify m u here = base ++ ishere
|
prettify m u here = base ++ ishere
|
||||||
where
|
where
|
||||||
base = if not $ null $ findlog m u
|
base = if not $ null $ findlog m u
|
||||||
|
@ -147,7 +148,7 @@ remotesWithoutUUID rs us = filter (\r -> uuid r `notElem` us) rs
|
||||||
{- Cost ordered lists of remotes that the LocationLog indicate may have a key.
|
{- Cost ordered lists of remotes that the LocationLog indicate may have a key.
|
||||||
-}
|
-}
|
||||||
keyPossibilities :: Key -> Annex [Remote Annex]
|
keyPossibilities :: Key -> Annex [Remote Annex]
|
||||||
keyPossibilities key = return . fst =<< keyPossibilities' False key
|
keyPossibilities key = fst <$> keyPossibilities' False key
|
||||||
|
|
||||||
{- Cost ordered lists of remotes that the LocationLog indicate may have a key.
|
{- Cost ordered lists of remotes that the LocationLog indicate may have a key.
|
||||||
-
|
-
|
||||||
|
|
|
@ -19,6 +19,7 @@ import Data.List
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Char
|
import Data.Char
|
||||||
|
import Control.Applicative
|
||||||
|
|
||||||
import qualified Branch
|
import qualified Branch
|
||||||
import Types
|
import Types
|
||||||
|
@ -40,7 +41,7 @@ configSet u c = do
|
||||||
|
|
||||||
{- Map of remotes by uuid containing key/value config maps. -}
|
{- Map of remotes by uuid containing key/value config maps. -}
|
||||||
readRemoteLog :: Annex (M.Map UUID RemoteConfig)
|
readRemoteLog :: Annex (M.Map UUID RemoteConfig)
|
||||||
readRemoteLog = return . remoteLogParse =<< Branch.get remoteLog
|
readRemoteLog = remoteLogParse <$> Branch.get remoteLog
|
||||||
|
|
||||||
remoteLogParse :: String -> M.Map UUID RemoteConfig
|
remoteLogParse :: String -> M.Map UUID RemoteConfig
|
||||||
remoteLogParse s =
|
remoteLogParse s =
|
||||||
|
|
|
@ -11,6 +11,7 @@ import System.IO.Error (try)
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import Control.Monad.State (liftIO)
|
import Control.Monad.State (liftIO)
|
||||||
import Control.Monad (filterM, forM_, unless)
|
import Control.Monad (filterM, forM_, unless)
|
||||||
|
import Control.Applicative
|
||||||
import System.Posix.Files
|
import System.Posix.Files
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Data.String.Utils
|
import Data.String.Utils
|
||||||
|
@ -192,7 +193,7 @@ writeLog1 :: FilePath -> [LogLine] -> IO ()
|
||||||
writeLog1 file ls = viaTmp writeFile file (unlines $ map show ls)
|
writeLog1 file ls = viaTmp writeFile file (unlines $ map show ls)
|
||||||
|
|
||||||
readLog1 :: FilePath -> IO [LogLine]
|
readLog1 :: FilePath -> IO [LogLine]
|
||||||
readLog1 file = catch (return . parseLog =<< readFileStrict file) (const $ return [])
|
readLog1 file = catch (parseLog <$> readFileStrict file) (const $ return [])
|
||||||
|
|
||||||
lookupFile1 :: FilePath -> Annex (Maybe (Key, Backend Annex))
|
lookupFile1 :: FilePath -> Annex (Maybe (Key, Backend Annex))
|
||||||
lookupFile1 file = do
|
lookupFile1 file = do
|
||||||
|
@ -201,7 +202,7 @@ lookupFile1 file = do
|
||||||
Left _ -> return Nothing
|
Left _ -> return Nothing
|
||||||
Right l -> makekey l
|
Right l -> makekey l
|
||||||
where
|
where
|
||||||
getsymlink = return . takeFileName =<< readSymbolicLink file
|
getsymlink = takeFileName <$> readSymbolicLink file
|
||||||
makekey l = case maybeLookupBackendName bname of
|
makekey l = case maybeLookupBackendName bname of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
unless (null kname || null bname ||
|
unless (null kname || null bname ||
|
||||||
|
|
|
@ -13,7 +13,7 @@ import System.FilePath
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import Data.List
|
import Data.List
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Control.Monad (liftM2)
|
import Control.Applicative
|
||||||
|
|
||||||
{- Returns the parent directory of a path. Parent of / is "" -}
|
{- Returns the parent directory of a path. Parent of / is "" -}
|
||||||
parentDir :: FilePath -> FilePath
|
parentDir :: FilePath -> FilePath
|
||||||
|
@ -65,7 +65,7 @@ absPathFrom cwd file = fromMaybe bad $ absNormPath cwd file
|
||||||
- relPathCwdToFile "/tmp/foo/bar" == ""
|
- relPathCwdToFile "/tmp/foo/bar" == ""
|
||||||
-}
|
-}
|
||||||
relPathCwdToFile :: FilePath -> IO FilePath
|
relPathCwdToFile :: FilePath -> IO FilePath
|
||||||
relPathCwdToFile f = liftM2 relPathDirToFile getCurrentDirectory (absPath f)
|
relPathCwdToFile f = relPathDirToFile <$> getCurrentDirectory <*> absPath f
|
||||||
|
|
||||||
{- Constructs a relative path from a directory to a file.
|
{- Constructs a relative path from a directory to a file.
|
||||||
-
|
-
|
||||||
|
|
|
@ -11,7 +11,7 @@ module Utility.Url (
|
||||||
get
|
get
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Monad (liftM)
|
import Control.Applicative
|
||||||
import Control.Monad.State (liftIO)
|
import Control.Monad.State (liftIO)
|
||||||
import qualified Network.Browser as Browser
|
import qualified Network.Browser as Browser
|
||||||
import Network.HTTP
|
import Network.HTTP
|
||||||
|
@ -64,7 +64,6 @@ request url requesttype = Browser.browse $ do
|
||||||
Browser.setErrHandler ignore
|
Browser.setErrHandler ignore
|
||||||
Browser.setOutHandler ignore
|
Browser.setOutHandler ignore
|
||||||
Browser.setAllowRedirects True
|
Browser.setAllowRedirects True
|
||||||
liftM snd $ Browser.request
|
snd <$> Browser.request (mkRequest requesttype url :: Request_String)
|
||||||
(mkRequest requesttype url :: Request_String)
|
|
||||||
where
|
where
|
||||||
ignore = const $ return ()
|
ignore = const $ return ()
|
||||||
|
|
Loading…
Add table
Reference in a new issue