具有多个类约束的Haskell类型签名

And*_*ott 26 haskell types static-typing type-signature

我怎么能有多个类约束,所以如果AEqBNum,我可以说

f :: Eq a => a -> b`
Run Code Online (Sandbox Code Playgroud)

要么

f :: Num b => a -> b
Run Code Online (Sandbox Code Playgroud)

所以,我怎么能有Eq a =>Num b =>在同一时间?

  • f :: Eq a => Num b => a -> b,
  • f :: Eq a -> Num b => a -> b,和
  • f :: Eq a, Num b => a -> b

没做我想做的事.

Ash*_*she 47

他们通常被称为类的限制,如EqNum被称为类型类.

这个怎么样?

f :: (Eq a, Num b) => a -> b
Run Code Online (Sandbox Code Playgroud)

括号很重要.

  • @Andrew实际上他们(现在)做了,尽管你可能不应该担心这些事情.Normall Haskell类型有*kind*(类型类型)`*`,因此元组类型有类型`* - >* - >*`.在GHC的最新版本中,存在一种新的"约束",即"Eq ::* - > Constraint",并且元组已经被提升为这种新类型. (7认同)