这是我用来构建列表的代码。
type Title = String
type Actor = [String]
type Year = Int
type Fans = [String]
type Film = (Title, Actor, Year, Fans)
type Database = [Film]
filmDatabase :: Database
filmDatabase = [("Casino Royale", ["Daniel Craig", "Eva Green", "Judi Dench"], 2006, ["Garry", "Dave", "Zoe", "Kevin", "Emma"])...]
下面是我用来尝试将列表显示为字符串的代码。
titleAsString :: Title -> String
titleAsString = show
actorsAsString :: Actor -> String
actorsAsString = intercalate ", " . map show
yearAsString :: Year -> String
yearAsString = show
fansAsString :: Fans -> String
fansAsString = intercalate ", " . map show
filmsAsString :: [Film] -> String
filmsAsString (t, a, y, f) = unlines [titleAsString t, actorsAsString a, yearAsString y, fansAsString f]
filmsAsStringDB = unlines . map filmsAsString
这是我得到的错误信息..
Couldn't match type ‘(Title, Actor, Year, Fans)’ with ‘Char’
Expected type: Title
Actual type: [Film]
In the first argument of ‘titleAsString’, namely ‘t’
In the expression: titleAsString t
我认为问题是我还没有将它们全部转换成字符串,但我不确定如何...
答案 0 :(得分:3)
您已将filmsAsString
声明为[Film] -> String
类型,但其参数显然只是Film
。
答案 1 :(得分:0)
你应该这样做
filmAsString :: Film -> String
filmAsString (t, a, y, f) = unlines [titleAsString t, actorsAsString a, yearAsString y, fansAsString f]
databaseAsString :: Database -> String
databaseAsString = unlines . map filmAsString