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;
答案 0 :(得分:2)
让我们从你的问题开始:
::[a]
类型的列表,则其中的每个项都具有a
类型(对于例如[Int]
,[String]
,...)对于您的代码,我可以毫无疑问地看到,所以我真的不知道如何回答任何问题。 但你应该得到这种类型错误:
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
(如果Char
是Num
的实例,那么这可能会有效,当然它不是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}}这样的东西直接存在)