如何指定从中调用函数的实例

use*_*947 2 haskell

假设我有一个类型类,对于这个类型类的每个实例我都有一个函数

f :: [Bool] -> Maybe (a, [a])
Run Code Online (Sandbox Code Playgroud)

我怎么称呼f?更准确地说,如果b是此类型类中的另一种类型,我如何指定我的意思是来自a的实例的f而不是来自b的实例?

use*_*560 7

有时您必须添加类型注释.考虑类型类Read:

class Read a where
  read :: String -> a
Run Code Online (Sandbox Code Playgroud)

如果你试图read "1"得到整数1,你会得到一个错误,因为没有办法知道这个类型a是什么.但是,这有效:read "1" :: Int.

如果您f在编译器可以弄清楚是什么的情况下使用您的函数a,那么它将正常工作.否则,您必须通过添加适当的类型注释来帮助编译器.