所以我正在创建一个程序,它将选择两个库中的一个(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的文件是他的选择,与类别,大小或标题或其他事物相同。
我的数据结构是
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
任何帮助都会很高兴。
提前致谢。
答案 0 :(得分:2)
Haskell中用于解析字符串的最简单机制是Read
typeclass。此类的实例具有足够的功能来实现
read :: (Read a) => String -> a
readLn :: (Read a) => IO a
其中任何一项都足以让您开始从输入中读取Int
(Read
的实例)。