import Data. List
import Magic
import System. Directory
magic = magicOpen [ MagicMimeType]
getMimeType
:: [ FilePath
] -> IO [ String ]
getMimeType fps
= magic
>>= ( \m
-> magicLoadDefault m
>> mapM ( magicFile m
) fps
)
groupByMime
:: [ FilePath
] -> IO [ [ ( FilePath
, String ) ] ]
groupByMime fps = do
mimes <- getMimeType fps
let zipped
= zip fps mimes
srted
= sortBy
( \
( _, m0
) ( _, m1
) -> compare m0 m1
) zipped
grped = groupBy ( \( _, m0) ( _, m1) -> m0 == m1) srted
ls
:: FilePath
-> IO [ FilePath
]
ls fp
= listDirectory fp
>>= ( \list
-> return $ map ( ( fp
++ "/" ) ++ ) list
)
fillTo n xs
| xsLen >= n = xs
| otherwise = xs
++ ( replicate
( n
- xsLen
) ' ' )
where
main =
ls "/proc" >>= groupByMime >>=
( \list ->
in putStrLn ( fillTo
30 "path" ++ "type" ) >>
CmltcG9ydCBEYXRhLkxpc3QKCmltcG9ydCBNYWdpYwoKaW1wb3J0IFN5c3RlbS5EaXJlY3RvcnkKCgoKbWFnaWMgPSBtYWdpY09wZW4gW01hZ2ljTWltZVR5cGVdCgoKCmdldE1pbWVUeXBlIDo6IFtGaWxlUGF0aF0gLT4gSU8gW1N0cmluZ10KCmdldE1pbWVUeXBlIGZwcyA9IG1hZ2ljID4+PSAoXG0gLT4gbWFnaWNMb2FkRGVmYXVsdCBtID4+IG1hcE0gKG1hZ2ljRmlsZSBtKSBmcHMpCgoKCmdyb3VwQnlNaW1lIDo6IFtGaWxlUGF0aF0gLT4gSU8gW1soRmlsZVBhdGgsIFN0cmluZyldXQoKZ3JvdXBCeU1pbWUgZnBzID0gZG8KCiAgICBtaW1lcyA8LSBnZXRNaW1lVHlwZSBmcHMKCiAgICBsZXQgemlwcGVkID0gemlwIGZwcyBtaW1lcwoKICAgICAgICBzcnRlZCA9IHNvcnRCeSAoXChfLCBtMCkgKF8sIG0xKSAtPiBjb21wYXJlIG0wIG0xKSB6aXBwZWQKCiAgICAgICAgZ3JwZWQgPSBncm91cEJ5IChcKF8sIG0wKSAoXywgbTEpIC0+IG0wID09IG0xKSBzcnRlZAoKICAgIHJldHVybiBncnBlZAoKCgpscyA6OiBGaWxlUGF0aCAtPiBJTyBbRmlsZVBhdGhdCgpscyBmcCA9IGxpc3REaXJlY3RvcnkgZnAgPj49IChcbGlzdCAtPiByZXR1cm4gJCBtYXAgKChmcCArKyAiLyIpICsrKSBsaXN0KQoKCgpmaWxsVG8gOjogSW50IC0+IFN0cmluZyAtPiBTdHJpbmcKCmZpbGxUbyBuIHhzCgogICAgfCB4c0xlbiA+PSBuID0geHMKCiAgICB8IG90aGVyd2lzZSA9IHhzICsrIChyZXBsaWNhdGUgKG4gLSB4c0xlbikgJyAnKQoKICB3aGVyZQoKICAgIHhzTGVuID0gbGVuZ3RoIHhzCgoKCm1haW4gPQoKICAgIGxzICIvcHJvYyIgPj49IGdyb3VwQnlNaW1lID4+PQoKICAgIG1hcE1fCgogICAgICAgIChcbGlzdCAtPgoKICAgICAgICAgICAgIGxldCAoc2gsIGhkKSA9IHNwbGl0QXQgMTAgbGlzdAoKICAgICAgICAgICAgICBpbiBwdXRTdHJMbiAoZmlsbFRvIDMwICJwYXRoIiArKyAidHlwZSIpID4+CgogICAgICAgICAgICAgICAgIG1hcE1fIChceCAtPiBwdXRTdHJMbiAkIGZpbGxUbyAzMCAoZnN0IHgpICsrIChzbmQgeCkpIHNoID4+CgogICAgICAgICAgICAgICAgIHB1dFN0ckxuIChmaWxsVG8gMzAgKHNob3cgJCBsZW5ndGggaGQpICsrICJvbWl0ZWQuXG4iKSkK