我有一个类型的电影如下:在Haskell中,如何将列表中的项目作为字符串返回?
type Film = (String, String, Int, [Rating])
type Rating = (String, Int)
我的目标,是要在一个数据库电影的列表,像这样:
myDatabase :: [Film]
myDatabase = [("Batman","Nolan",2012, [])]
并且在功能showFilms,它返回整个列表作为一个字符串值。
我的代码如下:
showFilms :: [Film] -> String
showFilms [] = []
showFilms (x:xs) = output: showFilms xs
where [[output]] = title ++ director ++ [(show year)] ++ [(show ratings)]
film = [film | (film) <- [x]]
title = [title | (title,director,year,ratings) <- film]
director = [director | (title,director,year,ratings) <- film]
year = [year | (title,director,year,ratings) <- film]
ratings = [ratings | (title,director,year,ratings) <- film]
它编译于WinGHCi,但是当我不是一个空数据库等输入什么,我得到这个错误:
*** Exception: HaskellCW.hs:32:29-95: Irrefutable pattern failed for pattern [[output]]
任何帮助,为什么这正在发生,以及如何解决它将不胜感激。
我对这种语言相当陌生,所以如果它不是最优雅的做法,我们很抱歉。
在此先感谢。
你能提供您想要的结果的例子吗? – Zeta
期望的结果是这样的: “蝙蝠侠,诺兰,2012,[ 蝙蝠侠2,诺兰,2013,[]” – AlexJonBarry