如何在运行之后显示在控制台中打印的任何类型的列表?

时间:2014-10-05 08:22:58

标签: haskell

  1. 如何显示运行后在控制台中打印的任何类型的列表
  2. 如何枚举列表以检查列表中的所有类型是否相同?
  3. 是否有像.net框架这样的动态类型?在Haskell中是否存在最高根上级类型来表示所有类型?
  4. mhead :: [a] -> [a]
    mhead (x:xs) = [head (x:xs)]
    
    main :: IO ()
    main =  do
      let b = [1,2,3,4,5]
      let aaa = mhead [1,2,3,4,5]
      putStrLn aaa;
    

1 个答案:

答案 0 :(得分:2)

让我们从你的问题开始:

  1. 查看Data.Typable lib。 (?)
  2. 列表中的类型始终相同 - 如果您有::[a]类型的列表,则其中的每个项都具有a类型(对于例如[Int][String] ,...)
  3. 哇,确实有一个lib也是Data.Dynamic - 从来没有猜到
  4. 对于您的代码,我可以毫无疑问地看到,所以我真的不知道如何回答任何问题。 但你应该得到这种类型错误:

    No instance for (Num Char) arising from the literal ‘1’
    In the expression: 1
    In the first argument of ‘mhead’, namely ‘[1, 2, 3, 4, ....]’
    In the expression: mhead [1, 2, 3, 4, ....]
    

    这是因为您尝试使用putStrLn打印结果,并且希望其输入的类型为String[Char])。 因此,Haskell尝试将1变为Char(如果CharNum的实例,那么这可能会有效,当然它不是print

    如果您使用main :: IO () main = do let b = [1,2,3,4,5] let aaa = mhead [1,2,3,4,5] print aaa 代替

    ,则可以修复
    let aaa = mhead [1,2,3,4,5]

    但对于这种实验我建议使用GHCi - 你可以通过这种方式获得更快的feedpack(所以不要编写完整的程序只需将文件加载到GCHi中并尝试像{{1}}这样的东西直接存在)