haskell脚本中的简单打印:如何编写main函数?

时间:2014-06-29 18:12:00

标签: haskell printing main

我开始学习haskell,但找不到一种工作main功能的方法。我已经以某种方式使它工作,但我认为这是纯粹的运气,因为我再也无法得到它。

基本上,我想要做的是创建一个脚本文件,以便从终端运行runhaskell script.hs

因此基本结构将是函数声明,后跟main = do或其他东西,并调用函数来打印其结果。

例如,我从“了解你一个Haskell”中得到了这个,但是下面的代码不起作用:

elem' :: (Eq a) => a -> [a] -> Bool  
elem' y ys = foldl (\acc x -> if x == y then True else acc) False ys  

main :: IO()
main = print (elem' 1 [1,2,3,4])

这给了我错误:

Build FAILED

/home/helton/Desktop/apaga.hs: line 6, column 16:
  Warning: Defaulting the following constraint(s) to type `Integer'
    (Eq a0)
      arising from a use of elem'
      at /home/helton/Desktop/apaga.hs:6:16-20
    (Num a0)
      arising from the literal `1' at /home/helton/Desktop/apaga.hs:6:22
  In the first argument of `print', namely `(elem' 1 [1, 2, 3, 4])'
  In a stmt of a 'do' block: print (elem' 1 [1, 2, 3, 4])
  In the expression: do { print (elem' 1 [1, 2, 3, 4]) }
    print (elem' 1 [1,2,3,4])

虽然我期待像

这样的东西
> True

1 个答案:

答案 0 :(得分:2)

尝试替换

print (elem' 1 [1, 2, 3, 4])

print (elem' (1::Int) [1, 2, 3, 4])

这里的问题是Haskell无法确定您的数字文字是否应该被解释为IntDouble s或任何其他数字类型。

在这里指定任何数字文字的类型就足够了,因为elem'要求所有数字都属于同一类型,因此一旦知道其中任何一个的类型,这种类型就可以用于其他所有类型