Алсо няши, предлагаю покодогольфировать.Задача: написать функцию checkFilenames :: [FilePath] → IO Bool, которая проверяет существование всех файлов из списка.Как обычно, побеждает самое короткое решение.
@rapture: Посмотрю.
holy notch!
Прозреваю import System.Directory (doesFileExist) а дальше по вкусу.
блин, это неинтересная часть. Вот именно «дальше по вкусу» важное.
Ты хочешь посоревноваться как сзиповать лист? Кстати, можно что-нибудь из System.Win32.File как-нибудь хитрожопо использовать.
запосчу своё so far нечитаемое убожество:checkFilenames fnames = fmap and $ mapM doesFileExist fnames
=\
Ну ты хоть запилил бы что-нибудь типа девятой главы из http://book.realworldhaskell.org/read/ Если уж я догадался, значит задача совсем пиздец.
прошло дохрена времени, я наконец-то разродилсяimport System.Directoryimport Data.FunctorcheckFilenames :: [String] → IO BoolcheckFilenames f = ((==) 0) . length . (dropWhile id) <$> mapM doesFileExist f
даже лучше можноcheckFilenames f = null . (dropWhile id) <$> mapM doesFileExist f
о! отличный оператор, как раз подходит.checkFilenames n = and <$> mapM doesFileExist n
провернул через Debug.Trace... Так mapM не ленивый? FFFFFUUUUUUUUUU~
checkFilenames :: [String] → IO BoolcheckFilenames [] = return TruecheckFilenames (file:other) = doesFileExist file >>= (\x → if x then checkFilenames other >>= return else return False)Считывает файлы до первого фейла. Но тут уже пахнет императивщиной
holy notch!
Прозреваю import System.Directory (doesFileExist) а дальше по вкусу.
блин, это неинтересная часть. Вот именно «дальше по вкусу» важное.
Ты хочешь посоревноваться как сзиповать лист? Кстати, можно что-нибудь из System.Win32.File как-нибудь хитрожопо использовать.
запосчу своё so far нечитаемое убожество:
checkFilenames fnames = fmap and $ mapM doesFileExist fnames
=\
Ну ты хоть запилил бы что-нибудь типа девятой главы из http://book.realworldhaskell.org/read/ Если уж я догадался, значит задача совсем пиздец.
прошло дохрена времени, я наконец-то разродился
import System.Directory
import Data.Functor
checkFilenames :: [String] → IO Bool
checkFilenames f = ((==) 0) . length . (dropWhile id) <$> mapM doesFileExist f
даже лучше можно
checkFilenames f = null . (dropWhile id) <$> mapM doesFileExist f
о! отличный оператор, как раз подходит.
checkFilenames n = and <$> mapM doesFileExist n
провернул через Debug.Trace... Так mapM не ленивый? FFFFFUUUUUUUUUU~
checkFilenames :: [String] → IO Bool
checkFilenames [] = return True
checkFilenames (file:other) = doesFileExist file >>= (\x → if x then checkFilenames other >>= return else return False)
Считывает файлы до первого фейла. Но тут уже пахнет императивщиной