我是初学者,想要学习Haskell!我想创建一个函数,它有两个输入参数和一个输出参数!该函数的任务是将两个数字相加并返回结果!这是我的代码,但它给出了错误
mygcd :: (a , b) -> c
mygcd c = a + b
main = do
a <- readLn
b <-readLn
print $ mygcd (a , b)
如果你能帮助我,我将感激不尽!
答案 0 :(得分:0)
我认为你可能会混淆类型注释中使用的类型变量,以及传递给函数的实际值。
在mygcd的定义中:
mygcd c = a + b
除非a
和b
在其他地方定义,否则这将是一个错误。换句话说,这些a
,b
和c
与类型注释中提到的a
,b
和c
不同为功能。类型注释中的那些仅指变量类型。
如果令人困惑,您可以不使用类型注释,让编译器为您确定。
例如,如果你想要一个函数添加两个数字,它就像这样简单:
addTwoNumbers a b = a + b
如果您将其加载到GHCi中,并使用:t addTwoNumbers
检查类型,则会看到推断类型为addTwoNumbers :: Num a => a -> a -> a
。
如果您希望函数添加元组的内容,可以将定义更改为
addTuple (a, b) = a + b
现在推断的类型将是addTuple :: Num a => (a, a) -> a
mygcd :: Num a => (a, a) -> a
mygcd (a, b) = a + b
main = do
a <- readLn
b <- readLn
print $ mygcd (a, b)