我开始学习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
答案 0 :(得分:2)
尝试替换
print (elem' 1 [1, 2, 3, 4])
与
print (elem' (1::Int) [1, 2, 3, 4])
这里的问题是Haskell无法确定您的数字文字是否应该被解释为Int
或Double
s或任何其他数字类型。
在这里指定任何数字文字的类型就足够了,因为elem'
要求所有数字都属于同一类型,因此一旦知道其中任何一个的类型,这种类型就可以用于其他所有类型