小编Che*_*zen的帖子

Haskell 函数参数类型声明的区别

我是 Haskell 的新手。我只是对这里的参数类型声明之间的差异感到困惑:

someFunction :: (Integral a) => a -> Bool -> a 
Run Code Online (Sandbox Code Playgroud)

这将编译。

someFunction :: (Integral a, Bool b) => a -> b -> a 
Run Code Online (Sandbox Code Playgroud)

然而考虑到这一点,编译器会抱怨:

• Expecting one fewer arguments to ‘Bool’
  Expected kind ‘* -> Constraint’, but ‘Bool’ has kind ‘*’
• In the type signature:
    someFunction :: (Integral a, Bool b) => a -> b -> a
Run Code Online (Sandbox Code Playgroud)

这两个声明有什么区别?我试图用谷歌搜索,但似乎没有直接的答案。

谢谢!


感谢您的快速回答。他们将我引向下一个问题:在声明中的不同位置设置参数约束背后的想法是什么?(与 C 类语言相比,在声明中将抽象或具体的约束混合在一起)

haskell

5
推荐指数
1
解决办法
488
查看次数

标签 统计

haskell ×1