Database Haskell-格式问题

Database Haskell-格式问题,database,function,haskell,formatting,higher-order-functions,Database,Function,Haskell,Formatting,Higher Order Functions,这是我必须显示数据库信息的当前代码,但是当打印出来时,阅读起来不是很清楚 type Title = String type Cast = String type Year = Int type Fans = String type Film = (Title, [Cast], Year, [Fans]) type Database = [Film] testDatabase :: Database testDatabase = [("Casino Royale", ["Daniel Crai

这是我必须显示数据库信息的当前代码,但是当打印出来时,阅读起来不是很清楚

type Title = String
type Cast = String
type Year = Int
type Fans = String

type Film = (Title, [Cast], Year, [Fans])
type Database = [Film]

testDatabase :: Database
testDatabase = [("Casino Royale", ["Daniel Craig", "Eva Green", "Judi Dench"], 2006, ["Garry", "Dave", "Zoe", "Kevin", "Emma"]),
    ("Cowboys & Aliens", ["Harrison Ford", "Daniel Craig", "Olivia Wilde"], 2011, ["Bill", "Jo", "Garry", "Kevin", "Olga", "Liz"]),     
        ("Catch Me If You Can", ["Leonardo DiCaprio", "Tom Hanks"], 2002, ["Zoe", "Heidi", "Jo", "Emma", "Liz", "Sam", "Olga", "Kevin", "Tim"])]      
运行此功能时:

displayAllFilms :: Database ->[(Title, [Cast], Year, [Fans])]
displayAllFilms [] = []
displayAllFilms ((i, j, k, l): xs)
        |l == [] = (i, j, k, []) : displayAllFilms xs
        |otherwise = (i, j, k, l) : displayAllFilms xs
它打印这个:

[(“皇家赌场”]、[“丹尼尔·克雷格”、“伊娃·格林”、“朱迪·丹奇”]、2006[“加里”、“戴夫”、“佐伊”、“凯文”、“艾玛”]、(“牛仔与外星人”、[“哈里森·福特”、“丹尼尔·克雷格”、“奥利维亚·王尔德”]、2011、[“比尔”、“乔”、“加里”、“凯文”、“奥尔加”、“利兹”]、(“如果你能抓住我”、[“莱昂纳多·迪卡普里奥”、“汤姆·汉克斯”]、2002、[“佐伊”、“海蒂”、“乔”、“埃玛”、“利兹”、“萨姆”、“奥尔加”、“凯文”、“蒂姆”])]

这显然是不可读的:是否有一种方法可以使每个胶片信息(在这种情况下)打印在单独的行上,即使用/n符号

非常感谢您的帮助,提前感谢!:)

这是怎么回事

  • 打印
    定义为

    print :: Show a => a -> IO ()
    print x = putStrLn (show x)
    
  • 如何解释地图?。。。你知道
    map
    做什么,是吗?给定一个函数和一个列表,它将函数应用于列表的每个元素,并返回一个结果列表

    map
    采用类型为
    a->b
    的函数,但
    mapM\u
    采用类型为
    a->iob
    的函数(我正在简化)。
    IO
    意味着该功能可能会执行一些i/o操作(在这种情况下:写入屏幕,这就是
    print
    的功能)

    mapM
    将所有独立的i/o连接在一起,并确保它们以正确的顺序出现

注:

  • 您原来的
    displayAllFilms
    实际上没有做任何事情:输出与输入相同,将任何内容打印到屏幕上的唯一原因是您从ghci提示符运行它
  • 它的拼写是
    \n
    ,而不是
    /n
    (虽然我没有明确地使用它,因为
    打印
    /
    计算机strln
    会在末尾自动添加一个换行符)

感谢您的帮助,请澄清这部分代码的作用:displayAllFilms db=mapM_uu打印db
print :: Show a => a -> IO ()
print x = putStrLn (show x)