我是 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)
然而考虑到这一点,编译器会抱怨:
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
这两个声明有什么区别?我试图用谷歌搜索,但似乎没有直接的答案。
谢谢!
感谢您的快速回答。他们将我引向下一个问题:在声明中的不同位置设置参数约束背后的想法是什么?(与 C 类语言相比,在声明中将抽象或具体的约束混合在一起)
haskell ×1