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



我开始学习haskell,但找不到一种方法来工作main函数。我已经成功了,但我认为这纯粹是运气,因为我不能再得到它了。

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

所以基本结构应该是函数声明后面跟着一个main = do之类的,然后调用函数来打印结果。

例如,我从"Learn you a 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

尝试替换

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

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

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

在这里指定任何数字字面值的类型就足够了,因为elem'要求它们都是相同的类型,因此一旦其中任何一个的类型已知,该类型就可以用于其他所有内容。

相关内容

最新更新