ulidtko 26.07.2011 09:26 lunatic asylum

Алсо няши, предлагаю покодогольфировать.
Задача: написать функцию checkFilenames :: [FilePath] → IO Bool, которая проверяет существование всех файлов из списка.
Как обычно, побеждает самое короткое решение.

Recommended by:

@rapture: Посмотрю.

1. ruda 26.07.2011 09:33 desktop

holy notch!

2. rapture 26.07.2011 09:38 unknown

Прозреваю import System.Directory (doesFileExist) а дальше по вкусу.

3. ulidtkorapture /2 26.07.2011 09:39 lunatic asylum

блин, это неинтересная часть. Вот именно «дальше по вкусу» важное.

4. raptureulidtko /3 26.07.2011 09:41 unknown

Ты хочешь посоревноваться как сзиповать лист? Кстати, можно что-нибудь из System.Win32.File как-нибудь хитрожопо использовать.

5. ulidtko 26.07.2011 09:44 lunatic asylum

запосчу своё so far нечитаемое убожество:

checkFilenames fnames = fmap and $ mapM doesFileExist fnames

6. ulidtkorapture /4 26.07.2011 09:44 lunatic asylum

=\

7. raptureulidtko /6 26.07.2011 09:48 unknown

Ну ты хоть запилил бы что-нибудь типа девятой главы из http://book.realworldhaskell.org/read/ Если уж я догадался, значит задача совсем пиздец.

8. werehuman 26.07.2011 10:04 Psi+

прошло дохрена времени, я наконец-то разродился

import System.Directory
import Data.Functor

checkFilenames :: [String] → IO Bool
checkFilenames f = ((==) 0) . length . (dropWhile id) <$> mapM doesFileExist f

9. werehumanwerehuman /8 26.07.2011 10:05 Psi+

даже лучше можно
checkFilenames f = null . (dropWhile id) <$> mapM doesFileExist f

10. ulidtkowerehuman /9 26.07.2011 11:23

о! отличный оператор, как раз подходит.

checkFilenames n = and <$> mapM doesFileExist n

11. werehumanulidtko /10 26.07.2011 12:01 Psi+

провернул через Debug.Trace... Так mapM не ленивый? FFFFFUUUUUUUUUU~

12. werehumanwerehuman /11 26.07.2011 12:22 Psi+

checkFilenames :: [String] → IO Bool
checkFilenames [] = return True
checkFilenames (file:other) = doesFileExist file >>= (\x → if x then checkFilenames other >>= return else return False)

Считывает файлы до первого фейла. Но тут уже пахнет императивщиной

Do you really want to delete ?