如何在haskell中将列表显示为字符串?

时间:2015-03-09 20:22:04

标签: list haskell

这是我用来构建列表的代码。

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

我认为问题是我还没有将它们全部转换成字符串,但我不确定如何...

2 个答案:

答案 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