来自==的模糊类型变量

时间:2019-06-28 07:55:49

标签: daml

我期望下面的代码示例应该编译

testOptionalEq = None == None
testEitherEq   = Left 1 == Left 1

testOptionalShow = show None
testEitherShow   = show (Left 1)

但是每一行都会导致编译错误,或者

Ambiguous type variable `a1' arising from a use of `=='
  prevents the constraint `(Eq a1)' from being solved.
  Probable fix: use a type annotation to specify what `a1' should be.

Ambiguous type variable `a0' arising from a use of `show'
  prevents the constraint `(Show a0)' from being solved.
  Probable fix: use a type annotation to specify what `a0' should be.

尝试在ghci中使用类似的Haskell代码。一种解决方法是为值赋予显式类型签名(例如None : Optional Int),但如果没有该功能,那就太好了。

1 个答案:

答案 0 :(得分:0)

您的代码仅在ghci中无法在已编译的Haskell中工作,因为ghci自动启用了ExtendedDefaultRules extension。如果要在DAML中实现这种行为,则需要在文件顶部显式打开{-# LANGUAGE ExtendedDefaultRules #-},然后此代码才能起作用。

但是,像Haskell一样,我通常不建议您打开此扩展程序。如果您没有足够的可用类型,这种情况就很少见了,而将此扩展名限制为“交互式类”会使情况变得很混乱。