, поэтому я создаю программу, которая выберет одну из двух библиотек (audio.lhs или video.lhs) и вернет PDF-файл со списком, упорядоченным и отфильтрованным по заданной категории:
mymain = do {putStrLn "What do you wanna search, Video or Audio?";
tipo <- getLine;
if tipo == "Audio"
then do {
a <- readFile "audio.lhs" ;
let text = splitEvery 7 (splitRegex (mkRegex "\t") a)
list = map musicFile text
select = filter ((>1000) .size) list
orderList = sortBy (comparing title)
dir = Dir orderList
hs = "import Dir\nimport TeX\nimport System.Cmd"
++ "\ntoTeX= do { writeFile \"out.tex\" $ prettyprint dat ;"
++ "system \"pdflatex out\"}"
++ "\ndat="
++ show dir
in do { writeFile "dat.hs" hs ;
putStrLn "\nOk.\nNow load \'dat.hs\' and run \'toTeX\'\n"
}}...
Все работает, но теперь мне нужно, чтобы функции
select = filter ((>1000) .size) list
и
orderList = sortBy (comparing title)
вместо того, чтобы работать со значениями, которые я дал, я хочу, чтобы они работали со значениями, выбранными пользователем программы (входные данные), поэтому, если он хочет фильтровать файлы, которые> 2000 или <500, он выбирает и то же самое с категорией, размером или названием или другой вещью. </p>
Моя структура данных
data File = File {
filename :: String ,
size :: Int ,
filetype :: String ,
copyright :: String ,
title :: String ,
artist :: String ,
year :: String } deriving Show
и
musicFile :: [String] -> File
musicFile [name, size, tipo, copy, title, artist, year] = File name (read size) tipo copy title artist year
Любая помощь будет с благодарностью.
Заранее спасибо.