请耐心等待,因为我对函数式编程和Haskell都很陌生.我试图在Haskell中编写一个函数,它接受一个Integers列表,打印所述列表的头部,然后返回列表的尾部.该函数需要是[Integer] - > [Integer]类型.为了给出一些上下文,我正在编写一个解释器,当在关联列表中查找其各自的命令时调用此函数(键是命令,值是函数).
这是我写的代码:
dot (x:xs) = do print x
return xs
Run Code Online (Sandbox Code Playgroud)
编译器给出以下错误消息:
forth.hs:12:1:
Couldn't match expected type `[a]' against inferred type `IO [a]'
Expected type: ([Char], [a] -> [a])
Inferred type: ([Char], [a] -> IO [a])
In the expression: (".", dot)
Run Code Online (Sandbox Code Playgroud)
我怀疑点函数中的打印调用是导致推断类型为IO [a]的原因.有什么方法可以忽略返回类型的打印,因为我需要返回的是列表的尾部被传递到点.
提前致谢.