我有一个函数(在模块中),它返回IO (Maybe a)
a 是Serialize
.
在我的主程序中,我将其称为如下:
msg <- fun token
print msg
并得到错误
Ambiguous type variable `a0' in the constraints:
(Data.Serialize.Serialize a0) arising from a use of `foo'
at test_00.hs:13:15-19
(Show a0) arising from a use of `print' at test_00.hs:17:9-13
Probable fix: add a type signature that fixes these type variable(s)
我确切地知道问题出在哪里,我可以使用 -XScopedTypeVariables 修复它,并对我调用库函数的方式进行一些更改,如下所示:
(msg :: Maybe String) <- cwPop token
print msg
但是,我宁愿避免使用 ScopedTypeVariables 并想知道在哪里可以测试 msg 是否是 show 类的成员然后打印它。如果不做别的。